学习OC的笔记,记下了分享一下。
Object-C,跟所有的面向对象语言一样,都具有三大特性。
三大特性:封装、继承、多态。
A.封装:
A.1成员变量的封装
set方法
作用:提供一个方法给外界设置成员变量值
规范:方法名必须以set开头。set后面跟上成员变量的名称,成员变量的首字母必须大写。返回值一定是void。一定要接收一个参数,而且参数类型跟成员变量类型一致。形参变量的名称不能和成员变量一样
get方法:
作用:返回对象内部的成员变量的值
规范:方法以get开头,成员变量首字母大写。肯定有返回值,返回值类型肯定与成员变量类型一致。 方法名跟成员变量名一样。不需要接收任何参数。
成员变量的命名规范:一定要以下划线 _开头
作用:1、让成员变量和get方法的名称区分开。 2、也可以和局部变量区分开。
A.2弱语法:
1.没有声明没有实现,调用没有声明的方法编译的时候只有警告。
只会在运行的时候报错:
-[Person test]: unrecognized selector sent to instance 0x7fe9804076a0:
给Person对象发送了一个不能识别的消息:test
2.有声明没有实现:
如果对象声明了一个方法,但是没有实现,编译的时候同样不会报错,只会有警告。只有在执行的时候会报错(错误和上面的一样)。
OC是在运行过程中才会检测对象有没有实现相应的方法(动态检测)
3.没有声明有实现:
这样写的话没有警告,也不会报错。
程序在运行过程中出错将会闪退。
A.3类方法:
类方法都是以加号(+)开头
然后调用的时候直接使用类名调用[Person printClassName];
类方法只能使用类名调用,不能使用对象调用。
允许类方法的方法名和对象方法的方法名相同。
在类方法中不能访问实例变量。
对象方法:
1.减号 - 开头
2.只能通过对象来调用
3.对象方法中仅能访问当前对象的成员变量
类方法:
1.加号 + 开头
2.只能由类来调用
3.在类方法中不能访问成员变量
类方法的好处和使用场合:
1.能用类方法尽量用类方法
2.不依赖于对象,执行效率高
3.场合:当方法内部不需要使用到成员变量时,就可以改为类方法
A.4工具类:
特点:基本没有任何成员变量,里面的方法基本都是类方法。
A.5关键字:self
1.谁调用了当前方法,self就指向谁(self如果出现在对象方法中,self代表对象。self如果出现在类方法中,self就代表类)。
2.当成员变量和局部变量同名时,采取就近原则,访问的是局部变量,就是方法内部的变量。
3.在类方法中的self不能调用对象方法,对象方法中的self不能调用类方法。
4.self不管是在类方法还是对象方法中,如果调用自己,那么就会形成死循环。
5.用self访问成员变量,区分同名的局部变量。可以使用self->成员变量。
6.可以利用"self->成员变量名"访问当前对象内部的成员变量。
7.可以利用[self 方法名];调用其他的对象方法(类)方法。
8.self不能调用函数。
B.继承:
继承的好处:
1、使代码精简
2、建立了类之间的关系
3、子类可以拥有父类中的所有成员变量和方法
注意点:
基本上所有类的根类(root class)是NSObject
如果写在同一个文件中,那么父类必须s要写在前面
OC中不允许子类和父类拥有相同名称的成员变量
子类重新实现父类的某个方法,不需要像C#中的需要关键字
调用某个方法时,优先去当前类中找,如果找不到,就去父类中找。
每个类中都有一个superclass指针,指向该类的父类
继承的坏处:耦合性太强了。
继承的使用场合:
1、当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
2、当A类拥有B类中的部分属性和方法时,可以考虑让B类继承A类
继承:xx是xxx
组合:xxx拥有xxx
组合:
关键字:super
调用父类的方法。(在重写父类的test方法中想调用父类的test方法或者其他方法,使用[super 方法名])
super处在对象方法中,那么就会调用父类中的对象方法
super处在类方法中,那么就会调用父类中的类方法
使用场景:子类重写父类的方法时,想保留父类的一些行为。
Object-C,跟所有的面向对象语言一样,都具有三大特性。
三大特性:封装、继承、多态。
A.封装:
A.1成员变量的封装
set方法
作用:提供一个方法给外界设置成员变量值
规范:方法名必须以set开头。set后面跟上成员变量的名称,成员变量的首字母必须大写。返回值一定是void。一定要接收一个参数,而且参数类型跟成员变量类型一致。形参变量的名称不能和成员变量一样
get方法:
作用:返回对象内部的成员变量的值
规范:方法以get开头,成员变量首字母大写。肯定有返回值,返回值类型肯定与成员变量类型一致。 方法名跟成员变量名一样。不需要接收任何参数。
成员变量的命名规范:一定要以下划线 _开头
作用:1、让成员变量和get方法的名称区分开。 2、也可以和局部变量区分开。
A.2弱语法:
1.没有声明没有实现,调用没有声明的方法编译的时候只有警告。
只会在运行的时候报错:
-[Person test]: unrecognized selector sent to instance 0x7fe9804076a0:
给Person对象发送了一个不能识别的消息:test
2.有声明没有实现:
如果对象声明了一个方法,但是没有实现,编译的时候同样不会报错,只会有警告。只有在执行的时候会报错(错误和上面的一样)。
OC是在运行过程中才会检测对象有没有实现相应的方法(动态检测)
3.没有声明有实现:
这样写的话没有警告,也不会报错。
程序在运行过程中出错将会闪退。
A.3类方法:
类方法都是以加号(+)开头
然后调用的时候直接使用类名调用[Person printClassName];
类方法只能使用类名调用,不能使用对象调用。
允许类方法的方法名和对象方法的方法名相同。
在类方法中不能访问实例变量。
对象方法:
1.减号 - 开头
2.只能通过对象来调用
3.对象方法中仅能访问当前对象的成员变量
类方法:
1.加号 + 开头
2.只能由类来调用
3.在类方法中不能访问成员变量
类方法的好处和使用场合:
1.能用类方法尽量用类方法
2.不依赖于对象,执行效率高
3.场合:当方法内部不需要使用到成员变量时,就可以改为类方法
A.4工具类:
特点:基本没有任何成员变量,里面的方法基本都是类方法。
A.5关键字:self
1.谁调用了当前方法,self就指向谁(self如果出现在对象方法中,self代表对象。self如果出现在类方法中,self就代表类)。
2.当成员变量和局部变量同名时,采取就近原则,访问的是局部变量,就是方法内部的变量。
3.在类方法中的self不能调用对象方法,对象方法中的self不能调用类方法。
4.self不管是在类方法还是对象方法中,如果调用自己,那么就会形成死循环。
5.用self访问成员变量,区分同名的局部变量。可以使用self->成员变量。
6.可以利用"self->成员变量名"访问当前对象内部的成员变量。
7.可以利用[self 方法名];调用其他的对象方法(类)方法。
8.self不能调用函数。
B.继承:
继承的好处:
1、使代码精简
2、建立了类之间的关系
3、子类可以拥有父类中的所有成员变量和方法
注意点:
基本上所有类的根类(root class)是NSObject
如果写在同一个文件中,那么父类必须s要写在前面
OC中不允许子类和父类拥有相同名称的成员变量
子类重新实现父类的某个方法,不需要像C#中的需要关键字
调用某个方法时,优先去当前类中找,如果找不到,就去父类中找。
每个类中都有一个superclass指针,指向该类的父类
继承的坏处:耦合性太强了。
继承的使用场合:
1、当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
2、当A类拥有B类中的部分属性和方法时,可以考虑让B类继承A类
继承:xx是xxx
组合:xxx拥有xxx
组合:
@interface Score : NSObject
{
int _cScore;
int _ocScore;
}
@end
@implementation Score
@end
@interface Student:NSObject
{
Score *_score;//这种方式就是组合,即一个对象中有另一个对象
int _age;
}
@end
@implementation Student
@end
关键字:super
调用父类的方法。(在重写父类的test方法中想调用父类的test方法或者其他方法,使用[super 方法名])
super处在对象方法中,那么就会调用父类中的对象方法
super处在类方法中,那么就会调用父类中的类方法
使用场景:子类重写父类的方法时,想保留父类的一些行为。
C.多态
父类指针指向子类对象,没有继承就没有多态,代码的体现:父类类型的指针指向子类对象。
好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象。
局限性:父类类型的变量,不能直接调用子类特有的方法,必须强转成子类类型变量后,才能直接调用子类特有的方法。
调用方法的时候会检测对象的真实形象,如果参数中使用的是父类类型,可以传入父类、子类对象。
多态的局限性:父类型的变量,不能调用子类对象的方法。
//Dog类继承自Animal类
Animal *a=[Dog new];
Dog *d=(Dog *)a;//将a转换成Dog *类型的变量后,即可调用dog方法