文章也同时在简书更新
引言
本文章主要收录一些在iOS日常中司空见惯、但是仔细咀嚼别有深意的,以及容易被大家忽视的细节。待扩充到一定量会考虑分类出第二篇文章。
拾遗
基本的基本
- OC强调的消息传递,而非方法,正是这一点使其区别于Java等语言。
类声明
- 实例变量自动声明为@protected,其他的可能的可见类型还包括@public和@private。
@property属性
- 参数nonatomic:此主要为线程访问行为,当采用atomic时,访问以序列方式进行,而nonatomic则支持并行处理。
创建对象
- 对象通过alloc分配内存空间,对应内存赋值后可得到一个对象实例,随后可使用init方法。
- 通过alloc方法创建的对象,包含一个自身的引用。如果内存分配过程中出现了问题(例如内存空间不足),则可以通过安全的方法检测当前引用是否安全。如下所示:123456if (self) {// everything is OK}else {// error: self = nil}
如果未继承NSObject且期望包含父类的构造方法,则可以使用:123if (self = [super init]) { ...}
- nil意指当前对象不存在,并包含false值(需要注意,nil不同于NULL,因而nil可作为有效参数加以使用)。
- 形如
MyObject *myObject = [[MyObject alloc] init]
,其中的*
号表明对应变量为指针。通常,对象通过其内存位置加以引用。例如,myObject表示为指针变量,因而指向内存位置0x12345678。 - id数据类型已经定义为指针结构:1typedef struct objc_object {Class isa;} *id
因而*
号应针对id予以忽略。
内存管理
- 某些时候,当与线程协同工作时,往往无法确切地知晓对象地生命周期于何时结束。对此,Objective-C语言提供了NSAutoreleasePool类。
NSObject
当检测相关类是否存在时,可以使用NSClassFromString()函数。如对应类不存在,则该函数返回nil。
如相关类存在,还可以进一步查询。继承自NSObject的各个类包含两个方法,即
[Class instanceRespondToSelector:SEL]
和[instance respondsToSelector:SEL]
。取决于查询方法是否存在,方法返回YES或NO。
UIWindow相关
- makeKeyAndVisible 方法确保父窗口处于活动状态,并可包含触摸事件。
- 在AppDelegate中操作UIWindow可以参照下述代码的三个步骤:
|
|
- 更多细节,我推荐看一下这篇文章:UIWindow in iOS,博主文章不多,但都是精品。
UIView绘图相关
- addSubview会触发UIView的drawRect方法。
- setNeedsDisplay消息将触发UIView中的drawRect:方法,一个常见的使用案例就是:当屏幕发生旋转时重绘View以正确显示。
微信公众号
第一时间获取最新内容,欢迎关注微信公众号:「洛斯里克的大书库」。