属性和setter以及getter
来源:互联网 发布:energy star软件 编辑:程序博客网 时间:2024/04/30 06:13
setter方法的作用:
为单一的实例变量赋值
setter方法规范写法:{-号方法,无返回值(void),名字以set开头 + 要设置的变量的实例变量名(首字母大写):(setter方法有且只有一个参数) + 参数的类型(和实例变量的类型相同) +参数名(和实例变量名相同(去掉了下划线))}
(set方法可以设置多个变量,set跟setter不是一码事)
getter方法的作用:
获取单一实例变量的值,
getter方法的命名规范:{-号方法,有返回值(返回值类型和实例变量类型相同)方法名直接和实例变量名相同(去掉了_),无参数.}
//属性:oc2.0之后出来的语法,用来替代setter以及getter方法,使用属性可以快速创建setter以及getter方法的声明,setter以及getter方法的实现.另外添加了对实例变量操作的安全处理
//@property用来定义属性,NSString *属性的类型(和实例变量的类型相同) name属性名(和实例变量名(去掉_)相同)
属性的特性:
属性格式:@property(第一大特性,第二大特性,第三大特性) NSString *name;
第一大特性:读写特性
(1)readonly:告诉编译器,属性在自动生成方法时,只会生成getter方法,不会生成setter方法.
例如:@property(readonly) NSString *name;
(2)readwrite:高数编译器,属性在自动生成方法时,既要生成setter方法,也要生成getter方法,系统默认的读写特性
(3)setter = aa:告诉编译器,当自动生成setter方法时,,setter方法的方法名为指定的名字aa,不采用默认的特性
(4)getter = bb;告诉编译器,当自动生成getter方法时,getter方法的方法名为指定的名字bb,不采用默认的特性
@property(readwrite:setter:aa) NSString *name;
第二大特性:原子性特性
(1)atomic:原子特性,保证线程安全,内部做了安全处理(加锁与解锁),系统默认的原子特性
(2)nonatomic:非原子性,不保证线程的安全.
因为对于setter以及getter方法的使用,比较频繁,在一段时间内可能要多次访问,所以使用atomic会非常消耗系统的资源,降低程序的执行效率,使用nonatomic虽然不保证现成的安全,但是在使用时一般情况下都是安全的,所以对于原子特性,使用nonatomic
第三大特性:语义特性
(1)assign:直接赋值,使用针对于基本数据类型,也可针对于对象类型(语义特性默认为assign)
(2)copy:针对于对象类型,并且要服从NSCoping协议的对象才可以,会复制出一个新的对象,拥有新的对象的所有权(引用计数 + 1),(先暂时这么理解)
(3)retain:针对于对象类型,会造成对象的引用计数+1.
@synthesize 属性的实现部分:
实现属性自动生成的setter以及getter方法
name属性名,指定要实现哪一个属性生成的setter以及getter方法
@synthesize name = _name;
如果在.m文件中未通过@synthesize对属性进行合成,系统会自动合成,只不过是系统默认的setter和getter方法内部所操作的实例变量是(_属性名)
若果指定的实例变量没有定义,系统会自动生成指定的实例变量,但是生成的实例变量是私有的,子类不能直接访问
如果对于setter和getter方法,如果我们实现了,系统就不会在自动生成了
点语法,是一种快速访问setter以及getter方法的方式,声明为默认生成对应的setter和getter方法,所以属性和setter和getter方法都有关联
(对象.属性名)----如果在等号左边,意味着调用setter方法,除此情况外都是使用getter方法
例如:shuaishuai.name = @"xiaohuaidan";//和下面等价
[shuaishuai setName:@"xioahuaidan"]
如果将@synthesize省略,并且我们自己实现setter以及getter方法时,系统就不会生成对应的setter以及getter方法,还有对应的实例变量
当把语义特性声明为assign时,setter以及getter方法内部实现
当把语义特性声明为retain时,setter以及getter方法内部实现
当把语义特性声明为copy时,setter以及getter方法内部实现
-(void)setName:(NSString *)name
{
if (_name != name) {
[_name release];
_name = [name retain];
}
}
-(NSString *)name
{
return [[_name retain] autorelease];
}
//@synthesize name = _name , sex = _sex,age = _age,height = _height,weight = _weight;
- 属性和setter以及getter
- js 定义属性 以及 getter 和 setter
- 属性getter和setter
- 属性getter和setter
- OC-属性setter和getter以及点语法(2)
- 【js对象属性的getter和setter】
- scala属性的getter和setter方法
- js对象属性的getter和setter
- JavaScript对象属性的getter和setter
- getter和setter方法
- Getter和Setter
- 关于Getter和Setter?
- setter和getter方法
- setter和getter方法
- getter和setter
- getter和setter
- getter和setter方法
- getter和setter方法
- myeclipse中设置字体
- Length of Last Word
- 平生第一个用Java写的a+b(HDU 1000)简单题,好开心
- unique index与non-unique index的dump区别
- Perl语言学习笔记 7 正则表达式
- 属性和setter以及getter
- Google即将改变世界的九大项目
- JS验证通过之后才提交表单
- [poj3356]字符串dp..2014.8.11
- POJ 3667 Hotel. (线段树 区间合并)
- java的字符串
- 适当放松放松的非
- easyui datagrid 键盘上下控制选中行示例
- [poj3356]字符串dp