这个问题回到了C
编程的基础(即非面向对象编程)。
当您使用引用结构的属性时,您获取的是该结构的副本,而不是对其的引用。
如果你写
CGRect rect = CGRectMake(...);
CGRect rect2 = rect;
您没有分配rect2
对 的引用rect
,而是在创建结构的副本。变rect2
不变rect
。
同样,如果您更改作为属性返回的结构的元素,您将更改对象拥有的 rect 副本的元素。从字面上看,这并没有什么好处——这种代码没有用处,因为您正在更改结构中没有引用任何地方的元素的值。
如果您想编辑该类实际使用的结构,您的属性需要返回一个指向它的指针。这可以做到,但代码变得比它的价值更混乱:
typedef struct myObj{BOOL isUp;} TOBJECT;
...
@property (nonatomic, assign) TOBJECT* myObj; //in class interface
...
self.myObj = malloc(sizeof(TOBJECT)); //in init method.
...
self.myObj->isUp = YES; //elsewhere, even potentially outside the class.
...
free(self.myObj); //in class dealloc method.