我想创建一个这样的方法:
- (void) checkAndUpdateStringProperty: (NSString **) property{
if (...)
*property = @"whatever";
}
我想使用它来传递同一类的属性:
- (void) somewhereElse{
....
[self checkAndUpdateStringProperty: &self.productName];
}
但这给出了一个语法错误,说“请求的属性表达式的地址”。有什么原因吗?如果我将class属性替换为局部变量,则可以正常工作:
- (void) somewhereElse{
NSString *name = nil;
[self checkAndUpdateStringProperty: &name];
}
最佳答案
只能通过其getter和setter方法访问属性,但要在对象的init
和dealloc
方法中初始化和取消初始化属性(当对象未处于完全一致的状态时)—用任何其他方式访问它们都会破坏其目的并且不尊重其属性(retain
,copy
等)。
它之所以无法编译,是因为属性访问器是方法调用的语法糖,并且您无法获取方法返回值的地址。 self.productName
与[self productName]
相同,而&[self productName]
毫无意义。
如果您确实要执行此操作,请不要对属性进行操作,而仅对常规变量(例如局部变量或ivar)进行处理,并记录函数的语义:调用函数是否需要release
返回的对象?等等,例如,各种采用NSError**
的Apple方法都指定返回的错误对象(如果有的话)是自动释放的对象,因此除非您也对其进行release
编码,否则不要自己对其进行retain
编码。
关于objective-c - Objective-C:不允许双指针指向属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7616147/