【问题标题】:Sending property as a reference param to a function in iOS?将属性作为参考参数发送到 iOS 中的函数?
【发布时间】:2014-06-29 14:17:08
【问题描述】:

我想做这样的事情:

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

【问题讨论】:

    标签: objective-c function properties parameters ref


    【解决方案1】:

    您不能在 (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) 传递给辅助方法,然后初始化这两个属性。

    或者您定义一个仅具有属性obj1obj2 的自定义类,并使辅助方法return成为该自定义类的实例。

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多