ObjC 记录_by jiang_ss 20150902

来源:互联网 发布:高校网络工程项目 编辑:程序博客网 时间:2024/06/18 18:07
六、属性声明/6.5 属性声明的修饰类型
声明类变量property的语法:
@property(属性参数1,属性参数2,…)类型名字
@propety (attributes)type name;
其中参数的主要分为4类:
1) 数据读写访问属性:readwrite(默认读写)/readonly(只有get方法)
2)内存设置属性:assign(default),retain or copy
3)多线程原子性属性:atomic(default)/nonatomic(防止线程安全:非原子化操作,该方法不需要多线程保护,节省开销,提高程序性能)
4)自定义设置访问方法名称属性:getter=…,setter=....(用于改变默认名称)
//其中各参数意义如下:
readwrite:产生setter/getter方法;
readonly:只产生简单的getter方法,没有setter方法;
assign:默认类型,setter方法中适用于基本数据类型的实例变量直接赋值,而不进行引用计数+1操作。
retain:setter方法中会对实例变量旧空间释放,使得新旧两个指针变量指向同一个对象(新对象),再进行retain操作,新空间引用计数再次加1。
copy:setter方法中会对实例变量旧空间释放,再对新对象进行copy操作,赋值给旧对象(两个指针变量分别指向各自的对象,互不影响)

atomic:支持多线程,如果使用多线程,有时会出现两个线程相互等待对方导致”死锁“,使用atomic会防止出现此情况,但是会消耗一定的资源。
nonatomic:禁止多线程,提高性能。(该方法不需要多线程保护,节省开销。)
变量的起别名:在类外对变量访问起保护作用(封装性);
例://在.h文件中声明
@property (nonatomic) int _radius;   //给radius变量起别名_radius
//在.m文件中
@synthesize radius;
//主函数中:
circle.radius=100;//error:类外无法访问内部变量名称
circle._radius=100;//ok:访问使用别名(封装性)
getter=访问方法名:用户自定义访问变量的方法名。
setter=设置方法名:用户自定义设置变量的方法名。

七、类的组合
7.1组合的概念:在oc中,你可以使用像c++中类与类的关系来实现代码的复用,并提高程序的编写速率,即oc中类的组合关系。
例:Circle=XYpoint+radius;//圆类由点类组合而成(”has-a“关系)
具体实现:先定义XYpoint类的接口;再定义Circle类的接口。
0 0
原创粉丝点击