ios之property修饰符
2016-06-10 22:44
246 查看
property参数
知识点
1.【掌握】控制set方法的内存管理2.【掌握】控制需不需要生成set方法
3.【掌握】多线程管理
4.【掌握】控制set方法和get方法的名称
1.控制set方法的内存管理
retain: release旧值,retain新值,(用于OC对象)assign: 直接赋值,不做任何内存管理(默认,用于非OC对象)
copy: release旧值,retain新值(一般用于 NSString *)
2.控制需不需要生成set方法
readwrite: 同时生成getter、setter方法(默认)readonly: 只生成getter方法
3.多线程管理
atomic: 只能单线程进行访问和修改属性,性能低(默认)nonatomic: 多线程进行访问和修改属性,性能高
注意:ios开发中99.99% 都是使用nonatomic(@property(nonatomic))
4.控制set方法和get方法的名称
setter:设置set方法的名称,一定有个冒号getter:设置get方法的名称,一般用于BOOL值类型的属性
注意:不同类型的修饰符不能组合在一起使用
property 其他
没有告诉@property要讲传入的参数赋值给谁,默认@property会将传入的属性赋值给_开头的成员变量@propery 有一个弊端:它只会生成简单的getter/setter方法的声明和实现,并不会对传入的数据进行过滤,如果想对传入的数据进行过滤,那么我们就必须重写getter/setter方法,如果不想对传入的数据进行过滤,仅仅是提供一个方法给外界操作成员变量,那么久可以使用@property
如果利用@property来生成getter/setter方法,那么我们可以不写成员变量,系统自动给我们生成一个_开头的成员变量
如果重写了setter方法, 那么property就只会生成getter方法
如果重写了getter方法,那么property就只会生成setter方法
如果同时重写了getter/setter方法,那么property就不会自动帮我们生成私有的成员变量(_xx就不可以使用)
注意
@propery 自动帮我们生成的成员变量是一个私有的成员变量,也就是说在.m文件中生成的,而不是在.h文件生成的,在.m文件中可以访问,在其他文件中不可以访问property 属性修饰符
如果给一个属性同时提供了getter/setter方法,那么我们就称这个属性为可读可写属性如果只提供了getter方法,那么我们称这个属性为只读属性
如果只提供了setter方法,那么我们称这个属性为只写属性
如果既没有提供getter也没有提供setter方法, 那么我们称这个属性为私有属性
格式:
@property(属性修饰符) 数据类型变量名称;
readwrite: 代表生成getter、setter方法。(默认情况下 @property 就是readwrite)例:@property(readwrite) int age;
readonly: 代表生成getter方法,不生成setter方法。例:@property(readonly) NSString *name;
自定义setter/getter方法名
格式:@property(setter=xxx:) double sex; @property(getter=isMarried) BOOL married;
一般BOOl类型的属性才需要自定义getter方法名,因为这样提高代码阅读性(判断是否结婚:之前: [xxx married]; 之后: [xxx isMarried];)
使用场景
copy:一般用于NSString/blockstrong:一般用于除了NSString/block之外的oc对象
weak: 一般用于代理/UI控件,当两个对象相互引用(例如控件和控件的代理),一个用strong, 一个用weak,避免循环引用。
assign:基本数据类型,结构体、枚举、(非oc对象)
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- C#中Property和Attribute的区别实例详解
- JavaScript中检查对象property的存在性方法介绍
- JavaScript中对象property的删除方法介绍
- JavaScript中遍历对象的property的3种方法介绍
- javascript 对象属性property与元素属性attribute的浏览器支持
- 简单总结C++中的修饰符类型
- JavaScript Table排序 2.0 (更新)
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- iOS App开发中的UISegmentedControl分段组件用法总结