我有CGSize的财产:
@property (nonatomic) CGSize descriptionSize;
Run Code Online (Sandbox Code Playgroud)
"
@synthesize descriptionSize = _descriptionSize;
Run Code Online (Sandbox Code Playgroud)
我可以通过点语法访问高度:
self.descriptionSize.height = 35;
Run Code Online (Sandbox Code Playgroud)
但这如何与括号语法一起使用?
[self setDescriptionSize:???];
Run Code Online (Sandbox Code Playgroud)
看起来对我很愚蠢,但我无法得到线索.提前致谢!
这是属性点符号的缺陷之一:self.descriptionSize.height中的那两个点看起来相同但意味着非常不同的东西.第一个是属性访问器,它映射到"get descriptionSize"方法,但第二个是旧式结构引用.第一个点返回CGSize 标量,而不是指向对象中大小值的指针.当第二个点设置返回的CGSize中的高度时,它在堆栈上设置一个值而不是更改对象中的值.这是你必须这样做的:
CGSize size = self.descriptionSize;
size.height = 35;
self.descriptionSize = size;
Run Code Online (Sandbox Code Playgroud)
...或没有属性点等号的等价物:
CGSize size = [self descriptionSize];
size.height = 35; // we still use the dot here: size is a struct not an object
[self setDescriptionSize:size];
Run Code Online (Sandbox Code Playgroud)
的实施descriptionSize将返回一个副本中的CGSize结构,所以你不能直接工作,并希望它会工作.你需要做的是获取整个CGSize结构,修改它,然后将其传回:
CGSize size = [self descriptionSize];
size.height = 35;
[self setDescriptionSize:size];
Run Code Online (Sandbox Code Playgroud)
但是,如果您正在处理属性self并且属性不是需要内存管理的对象,则修改大小的最有效方法是:
_descriptionSize.height = 35;
Run Code Online (Sandbox Code Playgroud)
但是,如果出现以下情况,您将使用以前的getter/setter方法:
self.| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |