我们可以在Objective-C中使用这样的__strong双点。
NSString *__strong * tmp_pointer;
NSString * target = @"first data";
tmp_pointer = target;
*tmp_pointer = @"second data";
NSLog(@"%@", target);
Output : first data
但是对象变量呢?
示例:DataObject有一个NSString *类型变量'item1'。
DataObject *dataObject = [[DataObject alloc] init];
NSString *__strong * tmp_pointer;
tmp_pointer = &dataObject.item1; <- Address of property expression requested error occurred.
我尝试了几个表达,但一切都失败了。
tmp_pointer = &(dataObject.item1);
tmp_pointer = &(NSString *)dataObject.item1;
tmp_pointer = &((NSString *)dataObject.item1);
有谁知道如何解决这个问题?
由于
答案 0 :(得分:2)
通过点表示法访问属性是方法调用的语法糖,所以你真正在做的是
&[dataObject item1]
这是语法不允许的。
&
的参数是一个表达式,必须是左值或函数指示符 [1] ,并且方法调用既不是。
如果想要获取getter返回的值的地址,则必须先将其转换为 lvalue 。最直接的方法是将其分配给局部变量:
NSString * item1 = dataObject.item1; // now item1 is a lvalue
NSString * __strong * tmp_pointer = &item1; // so it can be the argument of &
<子> [1] 子>
一个函数指示符作为具有函数类型的表达式。 子>
对象是可以检查和存储的存储区域,左值是引用此类对象的表达式。 子>
<子>(source)子>