摘要:
1.什么是SEL类型 SEL类型代表着方法的签名,在类对象的方法列表中存储着该签名与方法代码的对应关系 每个类的方法列表都存储在类对象中 每个方法都有一个与之对应的SEL类型的对象 根据一个SEL对象就可以找到方法的地址,进而调用方法 SEL类型的定义 typedef struct objc_sel 阅读全文
摘要:
1.+load方法 在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法(只会调用一次) 先加载父类,再加载子类;也就是先调用父类的+load,再调用子类的+load 先加载元原始类,再加载分类 不管程序运行过程有没有用到这个类,都会调用+load加载 2.+initialize 阅读全文
摘要:
1.类的本质 类的本质其实也是一个对象(类对象) 程序中第一次使用该类的时候被创建,在整个程序中只有一份。 此后每次使用都是这个类对象,它在程序运行时一直存在。 类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本,继承层次,以及消息与函数的映射表等 类对象代表类,Class类型,对象方 阅读全文
摘要:
1.自定义工厂方法 什么是工厂方法(快速创建方法) 类工厂方法是一种用于分配、初始化实例并返回一个它自己的实例的类方法。类工厂方法很方便,因为它们允许您只使用一个步骤(而不是两个步骤)就能创建对象. 例如new 自定义类工厂方法的规范 (1)一定是+号开头 (2)返回值一般是instancetype 阅读全文
摘要:
1.继承中的自定义构造方法 不能在子类访问父类私有变量 父类的属性交给父类的方法来处理 2.自定义构造方法的使用注意 (1)自己做自己的事情 (2)父类的属性交给父类的方法来处理,子类的方法处理子类自己独有的属性 自定义构造方法必须以intiWith开头,并且’W’必须大写 (2)父类的属性交给父类 阅读全文
摘要:
1.自定义构造方法 有时候仅仅靠重写构造方法(初始化方法),不能满足需求。比如一个班级中不可能所有学生的年龄都一样,这时候我们需要在创建某个学生的时候能够传入这个学生的年龄。这时候就需要来自定义构造函数(初始化函数) 自定义构造方法的规范 (1)一定是对象方法,以减号开头 (2)返回值一般是inst 阅读全文
摘要:
1.重写init方法 想在对象创建完毕后,成员变量马上就有一些默认的值就可以重写init方法 重写init方法格式: 想在对象创建完毕后,成员变量马上就有一些默认的值就可以重写init方法 重写init方法格式: + [super init]的作用: 面向对象的体现,先利用父类的init方法为子类实 阅读全文
摘要:
new方法实现原理 完整的创建一个可用的对象:Person *p=[Person new]; new方法的内部会分别调用两个方法来完成3件事情: (1)使用alloc方法来分配存储空间(返回分配的对象); (2)使用init方法来对对象进行初始化。 (3)返回对象的首地址 (1)使用alloc方法来 阅读全文
摘要:
1.静态类型和动态类型 静态类型 将一个指针变量定义为特定类的对象时,使用的是静态类型,在编译的时候就知道这个指针变量所属的类,这个变量总是存储特定类的对象。 将一个指针变量定义为特定类的对象时,使用的是静态类型,在编译的时候就知道这个指针变量所属的类,这个变量总是存储特定类的对象。 动态类型 这一 阅读全文
摘要:
@property修饰符 修饰是否生成getter方法的 readonly 只生成setter方法,不生成getter方法 readwrite 既生成getter 又生成setter方法(默认) readonly 只生成setter方法,不生成getter方法 readwrite 既生成getter 阅读全文
摘要:
1.@property增强 自从Xcode 4.x后,@property可以同时生成setter和getter的声明和实现 2.@property增强注意点 默认情况下,setter和getter方法中的实现,会去访问下划线 _ 开头的成员变量。 如果没有会自动生成一个_开头的成员变量,自动生成的成 阅读全文
摘要:
1.什么是@synthesize @synthesize是编译器的指令 什么是编译器的指令 ? 编译器指令就是用来告诉编译器要做什么! @synthesize会让编译器做什么呢? @synthesize 用在实现文件中告诉编译器实现成员变量的的访问器(getter/setter)方法 这样的好处是: 阅读全文