这个问题不是"我怎么做",而是关于Objective-C中某些Class属性的"为什么会这样".
我理解下面的两个例子是不允许的,并导致错误("表达式不可分配"):
self.myUIView.frame.origin.x = 50;
self.myUIView.frame.origin = CGPointMake(50,50);
Run Code Online (Sandbox Code Playgroud)
并且正确的方法是创建一个新的CGRect,设置所需的值然后分配它:
CGRect rect = self.myUIView.frame;
rect.origin = CGPointMake(50, 50);
self.myUIView.frame = rect;
Run Code Online (Sandbox Code Playgroud)
我想明白为什么会这样.
CGRect是一个包含两个结构的结构.限制是否与分配结构有关,以防止可能溢出该内存的赋值?或者更多的是关于公共和私人财产的公约?
我意识到这似乎是一个小问题/基本问题,但我认为清除这些基本问题的泥泞/不良理解很重要.
分配元素的问题struct
在于拥有struct
遗嘱的类不知道struct
已经改变了.当你谈论一个框架的起源时,这是不好的:UIView
预计会因为改变原点而移动,但由于不会通知该类改变,所以不会发生移动.
设置frame
,在另一方面,可以检测到,因为UIView
的setFrame
方法将被调用.这是UIView
可以处理调整大小,重新定位等的代码.
归档时间: |
|
查看次数: |
6437 次 |
最近记录: |