OC学习日记04-OC中类的属性
2016-08-04 18:00
155 查看
OC中类的属性
前言
在OC的类中,我们想把自己一些类里面的变量给隐藏起来,就要用到@protected还有@private,而对这些变量进行赋值还有调用,就要用到设置器(setter)与访问器(getter),但是我们会发现,如果用到标准的设置器和访问器的定义的话,代码量会非常的大,如果在制作大程序的时候,会使代码非常的“累赘”。那么,有没有简便的方法呢,这时候就要用到我们今天所说的类的属性。标准的设置器与访问器格式例子:
属性的声明
@property NSString *homeAddress;
相当于声明了设置器 与 访问器-(void)setAddress:(NSString*) address;与-(NSString *)address;
而属性的使用也非常简单:
在.h文件中的语法为:
@property (readwrite,nonatomic,strong) NSString *name; @property (readonly,nonatomic,assign)NSInteger age; @property NSString *homeAddress;
在.m文件中的语法为:
@synthesize homeAddress =_homeAddress;
注意:
如果我们@synthesize 注释掉 这个时候系统会为我们产生下划线开头的变量_homeAddress
访问读写 原子性,内存管理
1.存取方法名称
系统默认的存取方法名称 propertyName 和 setPropertyName ,例如name 和 setName:方法,这样做方便采用点语法,可以采用默认的存取方法。getter=getterName
setter=setterName
注意,如果改变了getter和setter方法名称,则必须提供自定义的方法。
2.属性的定义的相关语法
访问读写
readonly 指明属性是只读的,系统只会产生getter,而不会产生setter方法‘readwrite 指明属性是可读写的,这是默认的,因此可以省略
对于只读属性,如果试图通过点语法赋值,会编译错误
原子性
atomic 原子操作,这是默认的nonatomic 非原子操作,一般就使用nonautomic,但是没有办法保证在多线程环境下不出错。
内存管理
retain会通过retain来持有目标属性对象,之前的对象会接收到释放的消息
copy
会通过copy复制对象,之前的对象会接收到释放的消息
assign
采用简单的赋值方法,这是默认的方法
strong
表示强引用关系,即拥有目标对象的所有权
weak
表示弱引用关系,不拥有目标对象的所有权。当目标对象被销毁之后,属性只会被自动设为nil。
关于内存管理这几个语法的区别
strong 相当于retain 或者是copy,当我们这个属性是对象(NSString)的时候,我们就要用这三个strong、retain 、copy。
weak 相当于 assgin,基本数据类型就要用到assgin或者weak来描述。
点语法
在主函数main中我们可以对其通过点语法引用:NewStudent *newStudent1=[[NewStudent alloc]initWithName:@"Wsss" Age:23 HomeAddress:@"Wsss"]; NewStudent *newStudent2=[NewStudent newStudentWithName:@"Wsss" Age:23 HomeAddress:@"Wsss"]; newStudent1.name=@"sss"; newStudent2.name=@"asdas"; NewStudent *newStudent=[[NewStudent alloc]init]; newStudent.name=@"Rick"; // newStudent.age=@"25"; newStudent.homeAddress=@"GZ"; NSLog(@"%@",newStudent.name);
相关文章推荐
- 04-OC属性的使用、自动释放池、封装和继承
- OC_04属性的声明、实现,便利及设置器和访问器
- 第02天OC语言(04):结构体作为对象属性
- OC 的基本属性
- OC中属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?
- iOS开发-OC中属性创建需要注意的地方(property实例变量的创建和标准存取方法)
- OC中的属性
- OC 8 属性 内存管理组 对象控制组 重命名组 KVC键值编码
- OC中属性和成员变量的区别和使用
- Struts2 - 在Tag中使用Properties属性文件(从零开始学习Strust2_04)
- ios开发之oc与Swift混合编程OC进入Swift的类 以及Swift进入OC的方法-附带一个属性传值
- OC - NSString的属性区别(转载)
- OC第八天:属性
- APUE读书笔记-18终端输入输出-04获取和设置终端属性
- OC中—属性指示符
- three.js 02-04 之网格对象函数及属性
- oc_3 属性、点语法
- Mysql-04-列的属性(列约束)
- 【Objective-C】04-第一个OC程序解析
- OC学习之Runtime之一成员变量和属性