在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
objective-c在其对象拥有成员变量时,我们为了保持代码的封装,会将成员变量设置为@protected,并为成员变量编写setter和getter方法。 如: @interface Person : NSObject { @protected int _age; } - (int)get; - (void)setAge:(int)age; @end @implementation Person - (int)get { return _age; } - (void)setAge:(int)age { _age = age; } @end 在Xcode中,为了让我们摆脱这种枯燥的格式化代码,增加了@property属性设置,使用@property属性,编译器会自动帮我们实现这些代码, 如: @interface Person : NSObject @property int age; @end @implementation Person @end 这段代码经过编译器编译后与上面的代码完全相同。 但是,在实际应用中,内存管理,多线程,成员变量是否只读等等需求很多,所以@property为我们提供了很多参数来实现这些不同的需求,如下: 1.内存管理相关: *retain:release旧值,retain新值(适用于对象类型的成员变量) *assign:直接赋值(默认参数,适用于基本数据类型的成员变量) *copy: release旧值,copy新值 注:关于内存管理,请阅读http://www.cnblogs.com/yoran-yang/p/4293546.html 以retain为例: @interface Person : NSObject @property (retain) Book *book; @end 等同于: @interface Person : NSObject { @protected Book *_book; } - (Book *)get; - (void)setBook:(Book *)book; @end @implementation Person - (Book *)get { return _book; } - (void)setBook:(Book *)book { if(book != _book) { [book release]; _book = [book retain]; } } @end 2.读写控制相关 *readwrite:同时生成getter与setter的声明和实现(默认参数) *readonly:只生成getter方法 3.多线程相关 *nonatomic:禁止多线程,变量保护,提高性能,读写成员变量的操作效率可以提高数倍(强烈建议在非多线程环境的程序加上此参数) *atomic:线程安全的,性能低(默认参数为线程安全的,即加线程锁) 4.setter和getter方法的名称 *getter =(getter的方法名) *setter =(setter的方法名)注意:此方法名必须加上后面的“:”。 |
请发表评论