实现协议的继承
@protocol protocolName1
@protocol protocolName2
@synthesize 关键字
@synthesize beginTime;
@synthesize表示由编译器来自动实现beginTime的getter/setter方法,不需要你自己再手动去实现。
@protocol 关键字
@property 主要的作用就在于封装对象中的数据。
@property = ivar + getter + setter; 作用是:在编译期自动合成
协议里声明属性
@protocol protocolName1
@property 的作用是生成getter setter 方法,但是生成实例变量。
等价于
- (CFTimeInterval)beginTime;
- (void)setBeginTime:(CFTimeInterval)beginTime;
使用方法,可以在遵循的类中@property CFTimeInterval beginTime; 这样编译器可以自动生成getter,setter 方法,引用该变量也不会崩溃。
Category不允许声明属性
声明属性的时候,需要使用runtime关联属性。
@dynamic关键字
@dynamic指令告诉编译器在编译期间不自动生成getter和setter方法,避免编译期间产生警告。然后由自己实现存取方法或存取方法在运行时动态创建绑定。(动态绑定getter,setter,编译器不报错)当子类重载父类已经定义过的属性,会提示子类不会自动合成实例变量,必须 使用@synthesize来手动合成ivar或者使用@dynamic方法自动管理getter,setter方法。
ARC下不显示指定任何属性关键字时,默认的关键字都有哪些?
对应基本数据类型默认关键字是
atomic,readwrite,assign
对于普通的OC对象
atomic,readwrite,strong
atomic与nonatomic
atomic:默认是有该属性的,这个属性是为了保证程序在多线程情况下,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步的问题,提供多线程安全。 nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,禁止多线程,变量保护,提高性能和效率。
atomic是Objc使用的一种线程保护技术,基本上来讲是防止在写未完成的时候另一个线程读取,造成的数据错误。而这种机制是非常耗费系统资源的,所以iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。而iOS开发中,普遍使用nonatomic也是基于性能这一点。