NSObject子类作为属性

时间:2012-05-01 08:44:02

标签: objective-c ios

我想在我的项目中使用我的类作为属性。我的想法是,我有一个包含所有列表元素的类。我在下面的图表中显示的基本想法:enter image description here 所以我有一个myContainerClass对象,我想在其他类中做: @property(强,非原子)MyContainerClass * obj; 这里我有错误!我发现我只能将基础类型用作@property。但为什么?这样做的替代品是什么(传递对象)?

3 个答案:

答案 0 :(得分:2)

不,您可以使用任何您喜欢的课程作为属性

@property (nonatomic, strong) MyContainerClass* obj;
如果编译器知道MyContainerClass是一个类,那么

是完全合法的。要在头文件中执行此操作,最好的方法是使用@class前向声明:

@class MyContainerClass;

@interface SomeOtherClass : NSObject

// method an property declarations

@property (nonatomic, strong) MyContainerClass* obj;

@end

然后在实现中包含头文件:

#import "MyContainerClass.h"

@implementation SomeOtherClass

@synthesize obj;

// other stuff

@end

答案 1 :(得分:1)

你得到的错误是什么?可能是您没有将MyContainerClass导入到您想要使用它的位置。

#import "MyContainerClass.h"

答案 2 :(得分:0)

为要将属性添加到的对象声明一个类别:

@interface NSObject (MyContainerClassAdditions)

@property (nonatomic, strong) MyContainerClass *myContainerClass

@end

然后使用目标c关联对象技巧实现setter和getter方法:

#import <objc/runtime.h>

@implementation NSObject (MyContainerClassAdditions)

- (void)setMyContainerClass:(MyContainerClass *)myContainerClass {
    objc_setAssociatedObject(self, "myContainerClass", myContainerClass, OBJC_ASSOCIATION_ASSIGN);
}

- (MyContainerClass *)myContainerClass {
    return objc_getAssociatedObject(self, "myContainerClass");
}

@end