实例变量的可见度---能不能在外界访问。。

@protected (受保护的,默认的)---实例变量只能在该类和其子类内操作

@public =--------实例变量可以在类的外部和内部操作

@private----------实例对象只能在该类内访问


内部是只相应@implementation 和@end 之间 。。。。

为什么不能使用@public

使用@public关键字,暴露类类内部的细节。

不符合面向对象语言的三大特性之一--封装

面向对象三大特性:封装,继承,多态;


类中不能出现同名的方法

- (void)setSex:(NSString*)sex;

int double flout用作参数不用加*(NSInteger NSUInteger CGFloat);


receiver message] 消息机制,,

继承是单向的,不能相互继承。

继承是具有传递性的 ,,,

子类能继承父类全部的特征和行为,


继承的特点

OC中只允许单继承

没有父类单类,称为根类,OC中单根类是NSObject(祖宗)

继承单内容:所有单实例变量和方法

如果子类不满意父类的方法的实现,可以重写父类的方法


self 自身的对象

super 不是父类的对象,而是调用父类的方法,

是编译 器指令,并非对象, 是给super法消息,可以执行父类中实现的方法;


子类可以重写父类方法,即:子类即有自己的实现,又又父类的实现,如果想从父类调用方法,需要用到super发送消息;


初始化过程

执行父类中到初始化方法(向上递归到NSObject类中的初始化方法)

从根类NSObject开始执行初始化方法

判断父类中初始化是否成功,即self是否存在

完成对象的初始化设置,返回对象

初始化子类实例变量


制定初始化

通常把参数最全的初始化方法作为制定初始化方法

制定初始化方法负责向super发送初始化消息

每个类都会有指定的初始化方法

如果每一个类只有一个初始化方法,那它也是指定初始化方法


初始化方法特征

初始化发方是“-”方法

id或者instancetype类型的返回值

以init开头

可以带0到多个参数

内部实现:先执行super到初始化方法,在初始化自身变量,return self;


便利构造器

便利构造器是“+“方法,返回本类型 的实例,方法名以类名开头

可以有0到多个参数

内部实现:封装类alloc和初始化方法,使用起来更加简洁。


#import

导入头文件,即:导入文件中的内容到当前类

#import “ ”导入自定义类,#import < >导入类库中的头文件

功能类似C语言中的#include,但是可以避免头文件被重复导入

容易出现循环导入问题


@class

告诉编译器@class后的字符串作为类名使用,并未导入类的接口内容

有效避免嵌套循环导入