四.OC基础--1.文档安装和方法重载,
1. 在线安装
xcode-> 系统偏好设置->DownLoads->Doucument->下载
2. 离线安装
百度xcode文档
3. 方法重载: 是指在一个类中定义多个同名的方法
在OC中没有重载
2.self和super&static,
self和super:
1. self理解: 谁调用当前方法, self就代表谁.
比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法
在类方法中, self代表的是类, 因为只有类名才可以调用类方法.
注意: 在对象方法中不要使用self调用类方法
在类方法中不要使用self调用对象方法
2. 获取当前对象的类: Person *p = [Person p];
[p class] = [Person class] = Person
3. 在对象方法中可以通过 self->_speed访问成员变量.
4. super代表的是当前类的父类.
static关键字:
1. 在c语言中 static可以修饰局部变量、全局变量、函数
2. 在OC中, 不能用来修饰实例变量和方法, 但是可以修饰局部变量, 全局变量
3.继承和派生,
继承格式:
@interface Cat : Animal
@end
继承定义: 子类拥有了属性和方法.
派生: 父类向下产生子类的过程称为派生
继承的注意事项:
1. 子类不能定义和父类同名的变量,但是可以继承父类的变量
2. OC类支持单一继承,不支持多继承
3.我们都知道objective C不能像C++一样支持多继承,但是在OC的使用经常会碰到需要使用多继承的情况。例如,ClassA中有methodA,ClassB中methodB,
而现在需要使用这两个类中的方法。
答案:通过协议可以实现oc中的多继承
4.实例变量修饰符 ,
作用范围:
@public : 作用于所有的类
@protected: 作用于当前类,子类(派生类)
@private: 作用于当前类
@package: 作用框架级别的
默认情况下实例变量属于@protected修饰.
5.私有变量&私有方法,
定义格式:
在.m文件当中定义
@implementation Person : NSObject
{
int age; // 私有变量
}
// 不在.h文件中声明, 只在.m文件中实现
-(void)run{
NSLog(@"我是私有方法");
}
@end
私有方法只能在当前文件中使用, 不能被子类继承.
6.description方法
1. description方法默认返回对象的描述信息(默认实现是返回类名和对象的内存地址) ;
Description方法包括类方法和对象方法。(NSObject类所包含)
2. 基本知识
1)-description(对象方法)
使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出。
2)+description(类方法)
使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@。
使用@%打印对象如(“@%”,P)默认打印输出为<类名:内存地址>,虽然字符串也是对象,但字符串在使用@%打印时情况特殊。
3.打印对象
那么应该怎么实现打印对象的所有属性呢?在类的实现中重写description方法。
4.重写description方法,实现打印对象的所有属性
5.区别
+description方法决定了类对象的输出结果,即类本身
-description方法决定了实例对象的输出结果,即Person创建的对象。
6.打印补充
7. 千万不要在description方法中同时使用%@和self
- (NSString *)description {
return [NSString stringWithFormat:@"%@", self];
}
同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用description方法