1.方法的重载:
在一个类中定义同名的方法,方法的参数的类型和个数却不一样!
OC中没有方法的重载!
2.OC中的static使用:
在c语言中 static可以修饰
1}局部变量(延长局部变量的生命周期)、
2}全局变量(当前变量只能再当前文件中使用)
3}函数(当前函数只能再当前文件中使用)
注意: 在OC中static不能修饰实例变量和类/对象方法!
3.self和super:
self理解:自己 谁调用当前方法, self就代表谁.
super代表的是当前类的父类.
slef的应用场景:
1}----------------self使用在对象方法
比如: 在对象方法中,self代表的是调用当前方法的对象,只有对象才可以调用对象方法
2}----------------self使用在类方法中
在类方法中, self代表的是当前类,只有类名才可以调用类方法.
获取当前对象的类: Person *p = [Person new];
[p class] = [Person class] = Person
返回当前类
3}---------------self访问成员变量
在对象方法中可以通过 self->_speed访问成员变量.
注意: 在对象方法中不要使用self调用自身方法
在类方法中不要使用self调用自身方法
------------->self调用方法
[self 方法名称]; (类方法/对象方法)
注意:
1}OC中的self就相当于C++, Java中的this指针
2}self------>>>>要么代表当前对象---->只能调用对象方法,要么代表当前类--->只能调用类方法!
3}self在一个对象/类方法中使用的时候,就是等价于使用当前这个方法的对象/类
4}self就是一个存在(栈区)的指针!
[p class]返回的实质是当前的类/对象
NSLog(@"Person=%p",[p class]);
4.继承和派生:
继承格式://添加文件的时候选择父类名
@interface Cat : Animal//Animel就是一个父类
@end
继承定义:
子类拥有父类的所有属性和方法.
派生:
父类向下产生子类的过程称为派生
派生类拥有基类的属性和方法,还有自己派生的新增的属性和方法
方法重写:把父类的方法,在子类中重新给实现了(重写的时候不必在子类的.h文件中重新声明)
继承的注意事项:
1}子类不能定义和父类同名的变量,但是可以继承父类的变量
2}OC类支持单一继承,不支持多继承(也就是说一个类只能有一个父类)
3}OC类支持多层继承(子孙后代无穷尽也)
继承体系中方法调用的顺序
1}在自己类中找
2}如果没有,去父类中找
3}如果父类中没有,就去父类的父类中
4}如果父类的父类也没有,就还往上找,直到找到基类(NSObject)
5}如果NSObject都没有就报错了
5.基类和派生类:
唯一记住一点:基类的私有属性能被继承不能被使用!
6.实例变量修饰符:
作用范围:
@public(公开的) : 作用于所有的类
@protected(受保护的): 作用于当前类,子类(派生类)
@private(私有的): 作用于当前类
@package(框架级别的): 作用于框架级别的(目前菜鸟层次是接触不到滴)
7.私有变量和私有方法:
默认情况下实例变量属于@protected修饰.
@implementation Person : NSObject
{
int age; // 私有的实例变量--->是全局的
}
// 不在.h文件中声明, 只在.m文件中实现
-(void)run{
NSLog(@"我是私有方法");//私有方法
}
@end
1}私有变量定义--->在.m文件当中定义
私有变量--->特点:只能被当前类(即Person)中(可以用self)使用,不能被子类继承.
2}私有方法定义--->在.h中没有声明,在.m中实现了的方法
私有方法--->特点:只能在当前文件(本例子中即Person.m)中(可以用self)使用,不能被子类继承.
9.description方法:
1}description方法默认返回对象的描述信息(默认实现是返回类名和对象的内存地址) ;
NSLog(@"%@", objectA);这会自动调用objectA的descriptong方法来输出ObjectA的提述信息,
2}重写description方法(目的:经过我们重写后能够控制打印出我们想要的对象的信息):
-(NSString *)description{
return [NSString stringWithFormat:@"狗腿的个数:%d,狗的眼睛个数:%d",_tuiNum, _eyeNum];
}
3}description陷阱:千万不要在description方法中同时使用%@和self
-(NSString *)description {
return [NSString stringWithFormat:@"%@", self];
}
同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用description方法.
|
|