Objective c 将对象成员变量分配给另一个双强指针
我们可以在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
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 &