小技巧集合

实现协议的继承

@protocol protocolName1 方法列表 …… @end

@protocol protocolName2 方法列表 …… @end

@synthesize 关键字

@synthesize beginTime;

@synthesize表示由编译器来自动实现beginTime的getter/setter方法,不需要你自己再手动去实现。

@protocol 关键字

@property 主要的作用就在于封装对象中的数据。

@property = ivar + getter + setter; 作用是:在编译期自动合成

协议里声明属性

@protocol protocolName1 @property CFTimeInterval beginTime; (不可以声明成员变量) @end

@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也是基于性能这一点。

最近的文章

appium的使用

AppUI自动化实质:发送指令获取元素,计算元素坐标,自动化驱动程序根据指令对元素进行操作。了解个平台的自动化驱动框架,挑选一款成熟,合适的框架,学习API的使用。基础准备:adbUIAutomatorWebDriverAgentInstrumentsiOS自带的单元测试常见的UI自动化测试工具:Appium:多平台,支持多语言,开源,学习资料全Macaca:多平台,支持JS/Python,半开源MonkeyTalk:缺点是收费AppiumAppium不是一个自动化驱动程序,它是一个ser...…

继续阅读
更早的文章

getter/setter

参考链接@property (nonatomic, retain) NSNumber *count;- (NSNumber *)count { return _count;}- (void)setCount:(NSNumber *)count { if (count != _count) { id oldValue = _count; _count = [count retain]; [oldValue release]; }}@...…

继续阅读