Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将对象成员变量分配给另一个双强指针_Objective C_Variables_Object - Fatal编程技术网

Objective c 将对象成员变量分配给另一个双强指针

Objective c 将对象成员变量分配给另一个双强指针,objective-c,variables,object,Objective C,Variables,Object,我们可以在Objective-C中使用这样的强双点 NSString *__strong * tmp_pointer; NSString * target = @"first data"; tmp_pointer = target; *tmp_pointer = @"second data"; NSLog(@"%@", target); Output : first data 但是对象变量呢 示例:DataObject有一个NSString*类型变量“item1” DataObject *d

我们可以在Objective-C中使用这样的强双点

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.
有人知道我怎么解决这个问题吗


感谢通过点符号访问属性是方法调用的语法糖,所以您真正要做的是

&[dataObject item1]
这是语法不允许的

&
的参数是一个必须是左值或函数指示符[1]的表达式,方法调用两者都不是

如果需要getter返回的值的地址,必须首先将其转换为左值。最直接的方法是将其分配给局部变量:

NSString * item1 = dataObject.item1;        // now item1 is a lvalue
NSString * __strong * tmp_pointer = &item1; // so it can be the argument of &

[1] 作为具有函数类型的表达式的函数指示符
对象是可以检查并存储到的存储区域,左值是引用此类对象的表达式

()

记住,对属性的调用实际上是对getter方法的方法调用。因此,获取属性的地址是没有意义的。是的,我很愚蠢,我知道该属性一直只是一个Getter&Setter,但每次我都忘记了。OP的一个澄清:现在tmp_指针不指向存储在对象中的变量,它是它的一个副本,如果你设置它的值(例如:*tmp_指针=@“Hello”),您不影响对象属性。让
P
P1
作为指针,
O
作为对象。然后给定
P1->P->O
,我不明白为什么取消对
P1
的引用我就不会得到原始的
P
。或者换句话说,如果getter像
{return\u item1}
那样实现,那么实际上是在传递一个指向
NSString
的指针。通过执行
*tmp\u pointer
您将返回
\u item1
,因此
*tmp\u pointer=@“Hello”
将更改
item1
以指向
@“Hello”
。我的意思是,此赋值将item1的值更改为@“Hello”,但对象中存储的指针不受此赋值的影响(这似乎是使用指针指向指针的目标)。哦,好的,是的,现在有意义了。
NSString * item1 = dataObject.item1;        // now item1 is a lvalue
NSString * __strong * tmp_pointer = &item1; // so it can be the argument of &