将属性作为参考参数发送到iOS中的函数?

时间:2014-05-12 09:22:18

标签: objective-c function properties parameters ref

我想做这样的事情:

@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属性传递给初始化函数的示例。我知道通常的变量是可能的,但是没有关于如何处理属性的例子。

1 个答案:

答案 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方法,然后初始化两个属性。

或者您只使用属性obj1obj2定义自定义类,并使辅助方法返回此自定义类的实例。