self
OC中的关键字,没有@符号,指代当前对象,即谁调用它,它指代谁。在类方法中,self等于类
继承格式:声明时@interface 类名 : 父类而不是NSObject @end
基类继承父类,获得父类的所有属性和方法,但私有属性不能直接使用不过可以继承
重写方法时只需直接实现即可,则调用的就是子类的。
单继承,一个子类只能有一个父类。
super关键字,表示父类对象,调用父类的属性或方法
子类不可以定义一个和父类同名的属性,但可以重写方法
self不能调用当前的方法,否则会陷入死循环。
@public可以被所有人访问
@protected:只有自己和子类能访问
@private:只能自己使用,但是子类继承后,可以运用父类提供的方法进行修改。不可以直接调用。
实例变量修饰符,从自己开始,到下一个实例变量修饰符或大括号结束。
写在.m中的属性,自身可以使用,外界看不到,也访问不到。
可以被子类继承,但不会被直接使用,也不会被看到,形同private 只是不会被看到
没有声明,直接写在.m文件中的方法就是私有方法,不能被外界访问与调用,但是可以被自己调用。
私有方法不能被继承
被自己调用就是在自己这个文件中调用。
直接%@打印对象名,相当于调用了一个对象方法description
所以,重写方法description后,%@的值也会改变
可以与NSStringWithFormat结合, “ NSStringWithFormat: ” 后面相当于NSLog中的语句。
多态:不同的对象以自己的方式响应相同名称方法的能力称为多态
如:父类 * 变量名 = 子类对象,通常把右边的当成左边来用
编译时看左边,所以左边没有的方法会报错,若想调用子类有而父类没有的方法,则将对象强转成子类。
[(子类对象 *) 变量名 子类方法];
运行时看右边,所以只能干子类能干的事。
子类对象能调用父类方法,但是父类对象不能调用子类方法。
编译看左边,运行看右边。
1.必须有继承关系 2.必须重写方法 3.父类指针指向子类对象
通过 Class 变量名=[类名 Class]; 来获得类对象
类对象是唯一的,类加载到内存中,会生成一个Class类型的对象来代表这个类,叫做类对象。
可以用类对象来调用类方法 [类对象名 类方法名];
类对象可以实例化对象,直接new就行
类型名 *变量名 = [类名 new];
isa指向类对象,类对象中也有个isa指针,通过类对象指向代码段
类对象存放在数据区里
对象存放在堆里,对象名存放在栈里
方法都以SEL类型存储在内存中
当类声明一个对象,对象调用方法时,系统会把这个方法转换成SEL类型,然后拿这个SEL到类方法中去匹配。