我们可以在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);
有人知道我该怎么解决吗?
谢谢
通过点表示法访问属性是方法调用的语法糖,所以您真正要做的是
&[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] 甲功能标志作为具有功能类型的表达式。
一个对象是存储的区域可以被检测并存储在和一个左值是指这样的物体的表达式。
(来源)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句