当看书的时候发现什么都重要,都要记住,可是要自己静下心来写一下总结的时候,突然发现没什么好写的,一切似乎都变得容易了,我知道这是在欺骗自己的懒惰行为,过几天肯定会忘记,为了安抚一下自己,还是写一下吧。
当我们代码写到一定量时,可能会写出很多自己认为不错的函数或者宏,如果以后在其他的项目中我们想使用这些东西,可以使用#import包进来,作用类似于C语言里面的#include,但#import更加优秀,系统自动判断重复导入的问题,而#include需要程序员手动判断。
+代表类方法,使用类名来调用,必有一个类型为id的参数,-代表实例方法,使用对象来调用。其中self和super不能出现在类方法中,因为类方法的调用者是类本身,而不是对象,如果self和super出现在方法中,就不知道他们代表谁了。
可以给对象赋值为nil,不可以给基本类型赋值为nil。通过把基本类型强制转换为id类型则可以。
@private类成员只能在本类中使用
@package成员可以在该类和该类实现的同一个映像中使用 。同一个映像指的是该类编译后生成的同一个框架或同一个执行文件。
@protected成员可以在该类或者该类的子类中使用。
@public成员可以在任意地方使用。
成员的属性特点:
assign:指定对属性简单的赋值,引用计数不加1,主要适用于基础数据类型。
atomic(nonatomic):线程访问是否安全,是否为原子操作(某一时间,该对象只能被一个线程访问,其它线程不能访问),可以避免多线程并发破坏数据的完整性。atomic虽然可以保护数据的完整性,但会造成性能的下降,因此在大多数单线程的操作下,一般都使用的是nonatomic。
copy:当调用setter方法给成员变量赋值时,会将赋值的对象赋值一个副本,再将该副本赋值给成员变量,防止原成员变量的赋值被修改。常适用的情况是,当前成员变量为可变类型或者其子类为可变类型,被赋值的对象有可能在赋值之后被修改,如果程序不希望该赋值影响setter方法设置的成员变量的值,此时考虑使用copy指示符。例如NSString 类(因为它的子类NSMutableString为可变类)。
kvc键值编码:体现了动态编译时,格式为【对象 setvalue:属性值 forKey:属性名】。【对象 valueForKey:属性名】。或者是【对象 setValue:属性值 forKeyPath:属性路径(其它对象的属性值)】。
kvo键值监听:【被监听对象 addObsever:对象(监听器) forKeyPath:监听的属性 options:被监听对象的行为 context:上下文(一般为nil).
kvo编程的步骤:1.未被监听对象注册监听器。
2.从写监听器的observeValueForKeyPath:ofObject:change:context方法。
多态:objective c的指针类型的变量有两个,一个是编译时的,一个是运行时的,如果编译时的类型和运行时的类型不一致,则就出现了多态。例如A是B的父类,多态发生的情况为A *a = [[B alloc]init] ;可以看出 A*a说明编译时为父类类型,[[B alloc]init]运行时为子类B的类型。此时出现了多态。假如A中有方法 m,B中有方法m 、n,[ a m]此时的行为为子类B中m的行为。这就是相同类型的变量调用同一个方法时出现不同的行为特征,这就是多态。当a调用n方法时[a n] 应为父类中没有定义n方法,则此行代码就会在编译时出错。
判断指针变量的实际类型:
1.-(BOOL)isMemberOfClass:class 判断传入的对象是否为该类的实例
2.-(BOOL)isKindOfClass:class 判断传入的对象是否为该类或者该类子类的实例
3.-(BOOL)isSubclassOfClass:class 判断传入的对象是否为该类子类的实例
== 和isEqual方法:==判断两个对象是否为同一个对象(两个指针类型的变量指向同一个地址),对于基础类型只要值相等就可以了。isEqual是NSObject提供的一个实例的方法,判断标准和==一样,所以用该方法来判断对象时,一般需要从写该方法,由于NSString已经从写了该方法,所以只要两个字符串包含的来那个字符序列一样,即返回真。
类别(category):为一个类扩展方法,不需要访问原有类的源代码,动态地位现有类添加方法,而且可以类定义模块化。格式为 已有类 (类别名)。
协议(protocol)与委托(delegate):协议制定了一种规范,实现该协议时必须实现该协议中的某些方法,格式为 @protocol 协议名 <父协议1,父协议2......>
@optional :可以实现也可以不实现.
@required:必须要实现的方法。
暂时就到这里吧,随意总结的,肯定会有很多的错误,只是代表现阶段的理解。