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