@property:可以自动生成某个成员变量的setter和getter的声明。只能用在interface中。
@property int age;与下面两句等价
- (void)setAge:(int)age;
- (void)age;
@synthesize:自动生成特定的setter和getter的实现,并访问特定的成员变量。只能用在implementation中。
@synthesize age = _age; // 如果没有_age变量会自动生成,属性是private
// @synthesize age;这语句默认访问的是age变量
Xcode 4.4版本后@synthesize age = _age;这一句可以省略,只写@propertyint age;就有_age变量的声明以及它的setter和getter的声明和实现。
关键字id:万能指针,能指向/操作任何OC对象,id == NSObject *
构造方法:用来初始化对象的方法,是对象方法
重写构造方法的目的:为了让对象创建出来,成员变量就会有一定的值
完整的创建一个对象:
1、 分配存储空间;+alloc
初始化;-init
重写-init函数:
1、 一定要调用super的init方法:初始化父类中声明的成员变量和其他属性;
self = [super init];
2、 如果对象初始化成功,才有必要进行接下来的初始化
if (self) {}
3、 返回一个已经初始化完毕的对象
return self;
自定义构造方法规范:
1、 一定是对象方法
2、 返回值一般是以id类型
3、 方法名一般以init开头
- (void)initWithName:(NSString*)name;
category:分类,可以给某个类扩充一些方法
作用:在不改变原来类内容的基础上,可以为类增加一些方法
注意:①只能增加方法,不能增加成员变量
②分类方法实现中可以访问原来类的成员变量
③分类可以重新实现原来类中的方法,但是会覆盖原来的方法,会导致原来的方法没法再使用
④函数优先到分类找,然后再到原来类中找,最后到父类中找,即:分类(最后参与编译的分类优先)à原来类à父类
// 声明
@interface 类名 (分类名称)
@end
// 实现
@implementation 类名 (分类名称)
@end
快捷键:command + / 注释/取消注释
类的本质:类本身也是一个对象,是个class类型的对象。
+(void)load; // 当程序启动的时候,就会加载一次项目中所有的类和分类,而且加载后就会调用每个类和分类的+load方法。只会调用一次。
+(void)initialize; // 当第一次使用某个类的时候就会调用+initialize方法
先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)
先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)
NSLog(@”%@”, p); // p 是对象
默认情况下,利用NSLog和%@输出对象时,结果是:<类名:内存地址>
① 会调用对象p的-description方法;
② 拿到-description方法的返回值(NSString *)显示到屏幕上;
③ -description方法默认返回的是”类名+内存地址”
NSLog(@”%@”, c); // c 是类对象
① 会调用对象c的+description方法;
② 拿到+description方法的返回值(NSString *)显示到屏幕上;
③ +description方法默认返回的是”类名”
NSLog输出c语言字符串时,无法使用中文
-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------