iOS: Usage of self and underscore(_) with variable
Possible Duplicate:
How does an underscore in front of a variable in a cocoa objective-c class work?
在如下所示合成变量名之后,我很困惑地使用self或下划线:
1 2 3 4 5 | In .h file: @property(nonatomic, strong) NSMutableArray *users; In .m file: @synthesize users = _users; |
根据我在使用
此外,
1 2 3 | - (void)assignUsers:(NSMutableArray*)users { self.users = users; } |
有人能告诉我在使用
使用
当您使用
下面是一个很好的演示:
1 2 3 | - (void)setUsers:(id)users { self.users = users; // WRONG : it causes infinite loop (and crash), because inside the setter you are trying to reach the property via setter } |
和
1 2 3 | - (void)setUsers:(id)users { _users = users; // GOOD : set your property correctly } |
这也是关于吸气剂的问题。
关于基本内存管理(在
我认为这有助于考虑编译器是如何实现属性的。
当你写
如果您使用的是ARC,那么
1 2 3 4 | - (void)setUsers:(NSArray *)users { _users = users; // ARC takes care of retaining and release the _users ivar } |
如果您使用的是MRC(即未启用ARC),那么
1 2 3 4 5 6 | - (void)setUsers:(NSArray *)users { [users retain]; [_users release]; _users = users; } |
*-请注意,这是
是的,那是非常正确的。几个要点:
iOS不会因为使用点符号而自动释放对象。当财产被宣布为
使用最新版本的开发人员工具链(Xcode4.4+),您不再需要手动合成属性——它们是自动合成的(带有前导下划线)。