我想做这样的事情:
@property (nonatomic, retain) NSObject *obj1;
@property (nonatomic, retain) NSObject *obj2;
- (id)init {
if ((self = [super init])) {
[SomeClass someFuncWithParam1:*(self.obj1) param2:*(self.obj2)];
}
}
@implementation SomeClass
+ (void)someFuncWithParam1:(NSObject **)param1 param2:(NSObject **)param2 {
//init obj1;
...
//init obj2;
...
}
@end
我还没有找到任何关于如何将Objective-C属性传递给初始化函数的示例。我知道通常的变量是可能的,但是没有关于如何处理属性的例子。
答案 0 :(得分:0)
您不能在(Objective-)C中通过引用传递参数。你可能意味着什么 将变量的地址作为参数传递给方法,以便方法可以 通过指针设置变量的值。
但是,这不适用于属性。
self.obj1
只是方法调用[self obj1]
的方便表示法,它返回
财产的价值。并且无法获取返回值的地址。
你能做的是
传递相应实例变量的地址:
[SomeClass someFuncWithParam1:&_obj1 param2:&_obj2];
缺点是绕过了属性访问器方法。这可能是也可能不是 与你的情况有关。
传递临时局部变量的地址:
NSObject *tmpObj1;
NSObject *tmpObj2;
[SomeClass someFuncWithParam1:&tmpObj1 param2:&tmpObj2];
self.obj1 = tmpObj1;
self.obj2 = tmpObj2;
两种解决方案都不是很好。或者,您可以将整个对象(self
)传递给helper方法,然后初始化两个属性。
或者您只使用属性obj1
和obj2
定义自定义类,并使辅助方法返回此自定义类的实例。