У меня есть два пользовательских NSObjects, которые ссылаются друг на друг, как показано ниже:цель с циклической ссылкой
.h файл класс 1
#import <Foundation/Foundation.h>
#import "MyChildClass.h"
@interface MyParentClass : NSObject
@property (nonatomic, strong) NSString *Name;
@property (nonatomic) MyChildClass *myChild;
@end
.m файл класс 1:
#import "MyParentClass.h"
@implementation MyParentClass
@end
и ...
.h файл класс 2:
#import <Foundation/Foundation.h>
#import "MyParentClass.h"
@interface MyChildClass : NSObject
@property (nonatomic) MyParentClass *myParent;
@end
.m файл класс 2:
#import "MyChildClass.h"
@implementation MyChildClass
@end
Когда я пытаюсь реализовать те, как показано ниже, проект не будет строить, с ошибкой " Ограничения Arc: Неявное преобразование указателя Objective-C в 'int *' не разрешено с помощью ARC "
Просмотреть Код реализации контроллера:
MyParentClass *newParent = [[MyParentClass alloc] init];
MyChildClass *newChild = [[MyChildClass alloc] init];
newParent.Name = @"Johnny";
newParent.myChild = newChild;
newChild.myParent = newParent;
Однако, когда я вкладываю второй пример на отдельные .h/.m файлы, проект будет строить:
вложенной .h файл:
#import <Foundation/Foundation.h>
@class MyNestedClass;
@interface MyChildNestedClass : NSObject
@property (nonatomic, strong) MyNestedClass *myNested;
@property (nonatomic, strong) NSString *ChildName;
@end
@interface MyNestedClass : NSObject
@property (nonatomic, strong) MyChildNestedClass *myChild;
@property (nonatomic, strong) NSString *ParentName;
@end
вложенного. м файл:
#import "MyNestedClass.h"
@implementation MyChildNestedClass
@end
@implementation MyNestedClass
@end
I gue ss, что, вложив объекты в один файл, я каким-то образом обманываю ARC, и я действительно не должен создавать эти циклические ссылки.
Может ли кто-нибудь предложить правильный способ вложенности таких типов?
То, что я пытаюсь достичь, является следующим псевдо-сценарием: у родителя есть свойство Ребенка. У ребенка есть свойство родителя, это ребенок.
Я нахожу это трудным, потому что я не должен это делать (круговые ссылки), или я пропускаю что-то очевидное?
Большое спасибо!
FYI - Вы должны быть уверены, что ребенка ссылка на его родительскую ссылку является «слабым». В противном случае у вас есть некоторые нежелательные ссылочные циклы. – rmaddy