我有两个相互引用的自定义NSObject,如下所示:
.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 Restrictions:使用ARC禁止将Objective-C指针隐式转换为'int *'”
查看控制器实施代码:
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
嵌套的.m文件:
#import "MyNestedClass.h"
@implementation MyChildNestedClass
@end
@implementation MyNestedClass
@end
我想通过将对象嵌套到单个文件中,我在某种程度上欺骗ARC,而且我真的不应该创建这些循环引用。
有人能建议像这样嵌套类型的正确方法吗?
我想要实现的是以下伪方案:Parent具有Child的属性。孩子有父母的财产,它是孩子的。
我发现这很难,因为我不应该这样做(循环引用),或者我错过了一些明显的东西?
非常感谢!
答案 0 :(得分:4)
请勿在父类的头文件中#import "MyChildClass.h"
,将其更改为
@class MyChildClass
并在源文件(.m)中添加#import