2014-05-12 24 views
0

我想要做這樣的事情:將屬性作爲參考參數發送給iOS中的某個功能?

@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 

我還沒有發現任何例如如何客觀-C性能傳遞到初始化函數。我知道通常的變量是可能的,但是沒有關於如何處理屬性的例子。

回答

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)傳遞給輔助方法,然後初始化這兩個屬性。

或者你自定義一個類只有屬性obj1obj2,使輔助方法返回這個自定義類的一個實例。