您的位置:首页 > 移动开发 > IOS开发

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/block

strong:一般用于除了NSString/block之外的oc对象

weak: 一般用于代理/UI控件,当两个对象相互引用(例如控件和控件的代理),一个用strong, 一个用weak,避免循环引用。

assign:基本数据类型,结构体、枚举、(非oc对象)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios property 修饰符