iOS开发的52个要点纪要之二

6、可以用属性@property语法来定义对象中所封装的数据。

通过“特质”来指定存数数据所需的正确语义。

在设置属性所对应的实例变量时,一定要遵从该属性所声明的语义。

开发iOS程序时应该使用nonatomic属性,因为atomic属性会严重影响性能。

7、在对象内部读取数据时,应该直接通过实例变量来读,而写入数据时,则应通过属性来写。

在初始化方法及dealloc方法中,总是应该直接通过实例变量来读写数据。

有时会使用惰性初始化技术配置某份数据,这种情况下,需要通过属性来读取数据。

8、若要检测对象的等同性,请提供“isEqual:”与hash方法。

相同的对象必须具有相同的哈希码,但是两个哈希码相同的对象却未必相同。

不要盲目地逐个检测每条属性,而是应该依照具体需要来制定检测方案。

编写hash方法时,应该使用计算速度快而且哈希码碰撞几率低的算法。

9、类族模式可以把实现细节隐藏在一套简单的公共接口后面。

系统框架中经常使用类族。

从类族的公共抽象基类中继承子类时要当心,若有开发文档,则应首先阅读。

10、通过objc_setAssociatedObject“关联对象”机制把两个对象连起来。

定义关联对象时可指定内存管理语义,用以模仿定义属性时所采用的“拥有关系”与“非拥有关系”。

只有在其他做法不可行时才应该选用关联对象,因为这种做法通常会引入难以查找的bug。

时间: 2024-10-12 23:59:32

iOS开发的52个要点纪要之二的相关文章

iOS开发的52个要点纪要之三

11关于objc_msgSend的作用 其原型为:void objc_msgSend(id self, SEL cmd,...) objc_msgSend_stret 如果待发送的消息要返回结构体,交由此函数处理: objc_msgSend_fpret 如果消息返回的是浮点数,交由此函数处理: objc_msgSendSuper 如果要给超类发消息,交由此函数处理. 消息由接受者.选择子及参数构成.给某对象“发送消息(invoke a message)”也就相当于在该对象上“调用方法(call

iOS开发的52个要点纪要之五

21.理解Objective-C错误模型 @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"must be overriden" userInfo:nil]异常只用于处理严重错误. 出现不那么严重的错误时,OC语言的编程范式为:令方法返回nil/0,或者使用NSError,表明其中有错误发生. -(id)initWithValue:(id)value{ if (self = [

iOS开发的52个要点纪要之四

16.提供“全能初始化方法” 在类中提供一个全能初始化方法,并于文档里指明.其他的初始化方法均应调用此方法. 如全能初始化方法与超类不同,则应覆写超类中的对应方法. 如果超类的初始化方法并不适用于子类,那么应该覆写这个超类方法,并在其中抛出异常. 17实现description方法 实现description方法,返回一个有意义的字符串,用于描述该实例 -(NSString *)description{ return [NSString stringWithFormat:@"<%@ :%p

iOS开发的52个要点纪要之一

1.Objective-C为C语言添加了面向对象的特性,是其超集.Objective-C使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型.接受一条消息之后,究竟应该执行何种代码,由运行期环境而非编译器来决定. 理解C语言的核心概念有助于写好Objective-C程序,尤其要掌握内存模型与指针. 2.除非确有必要,否则不要引入头文件.一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入头文件.这样可以尽量降低类之间的耦合. 有时无法使用向前声明,比如要声明某个类遵循

iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

这里接着前文<iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)>,主要是干货环节,列举了如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 三. 常用方法的封装 虽然 PhotoKit 的功能强大很多,但基于兼容 iOS 8.0 以下版本的考虑,暂时可能仍无法抛弃 ALAssetLibrary,这时候一个比较好的方案是基于 ALAssetLibrary 和 PhotoKit 封装出一系列模拟系统 Asset 类的自定义类,然后在其中封装好兼容 A

iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 这里引用一下前文中对 PhotoKit 基本构成的介绍: PHAsset: 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源 PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值 PHAssetCo

iOS开发——淫技篇&amp;iOS开发中各种淫技总结(二)

iOS开发中各种淫技总结(二) 先来张笔者电脑上面安装的Mac app 一:for .. in 的内部实现(swift): 1 var g = array.generate() 2 while let obj = g.next() { 3 4 5 print(obj) } 6 二:map/Fileter/Reduce map map方法,其获取一个闭包表达式作为其唯一参数. 数组中的每一个元素调用一次该闭包函数,并返回该元素所映射的值(也可以是不同类型的值). 具体的映射方式和返回值类型由闭包来

iOS开发之手势gesture详解(二)

与其他用户界面控件交互 UIControl子类会覆盖parentView的gesture.例如当用户点击UIButton时,UIButton会接受触摸事件,它的parentView不会接收到.这仅适用于手势识别重叠的默认动作的控制,其中包括: 一根手指单击动作:UIButton, UISwitch, UIStepper, UISegmentedControl, and UIPageControl. 一根手指擦碰动作:UISlider 一根手指拖动动作:UISwitch 包含多点触摸的事件 在iO

iOS开发之使用XMPPFramework实现即时通信(二)

上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测试,当然也少不了Openfire服务器,在这就不详述Openfire的安装过程了(网上的教程还是蛮多的),Openfire的安装仅需要一个数据库的支持,本篇是用的MySql数据库.当然这不是本篇的重点. 废话少说,切入今天的正题.今天要给之前的微信加入登陆,获取好友列表,聊天(发送文字,表情,图片,