0

我想在我的项目中使用我的类作为属性。这个想法是我有一个包含所有列表元素的类。我在图中显示的基本思想:在此处输入图像描述 所以我有一个 myContainerClass 对象,我想在其他一些类中做:@property (strong,nonatomic) MyContainerClass *obj; 在这里我有错误!我发现我只能将 Foundations 类型用作@property。但为什么?这样做(传递对象)的替代品是什么?

4

3 回答 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 回答