我想在我的项目中使用我的类作为属性。这个想法是我有一个包含所有列表元素的类。我在图中显示的基本思想: 所以我有一个 myContainerClass 对象,我想在其他一些类中做:@property (strong,nonatomic) MyContainerClass *obj; 在这里我有错误!我发现我只能将 Foundations 类型用作@property。但为什么?这样做(传递对象)的替代品是什么?
问问题
266 次
3 回答
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
于 2012-05-01T08:54:32.033 回答
1
你得到什么错误?可能是您没有将 MyContainerClass 导入到您想要使用它的位置。
#import "MyContainerClass.h"
于 2012-05-01T08:52:32.917 回答
0
为要添加属性的对象声明一个类别:
@interface NSObject (MyContainerClassAdditions)
@property (nonatomic, strong) MyContainerClass *myContainerClass
@end
然后使用objective 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
于 2012-05-01T08:49:10.523 回答