客观c循环参考

时间:2015-01-23 16:39:44

标签: ios objective-c

我有两个相互引用的自定义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的属性。孩子有父母的财产,它是孩子的​​。

我发现这很难,因为我不应该这样做(循环引用),或者我错过了一些明显的东西?

非常感谢!

1 个答案:

答案 0 :(得分:4)

请勿在父类的头文件中#import "MyChildClass.h",将其更改为

@class MyChildClass

并在源文件(.m)中添加#import