将Object成员变量分配给另一个双强指针

时间:2013-09-09 21:38:52

标签: objective-c variables object

我们可以在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);

有谁知道如何解决这个问题?

由于

1 个答案:

答案 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