首页 > 代码库 > 《OC疯狂讲义》笔记(五)
《OC疯狂讲义》笔记(五)
1、OC中的点语法
点语法: 对象名.成员变量名 (点语法不是访问成员变量,而是方法的调用)
它是一个编译器特性
点语法作用:可以替换传统的get和set方法的调用
点语法的前提:
首先得先有 get和set方法
点语法实质:
调用get和set方法
如果点语法出现在 = 的左边,表示设置值,相当于调用了set方法
p.age = 10;
替换为:[p setAge:10];
如果点语法出现在 = 的右边,表示获取值,相当于调用了get方法
int age = p.age;
替换为:int age = [p age];
替换为:[p dispAge:p.age];
[p dispAge:[p age]];
注意:
点语法实质是调用get和set方法,所以,如果没有定义成员变量的get和set方法,这个时候,是不能使用点语法的。
2、@property使用、增强
1)@property 在Xcode4.4之前的使用方法
(1)只是用@property作为方法的声明‘
格式:@property int age; 表示帮我们生成一个get和set age的方法
{
int age;
int _age;
NSString *_name;
}
@property int age;
-(void)setAge:(int) age;
-(int)age;
//手工实现 get和set方法
-(void)setAge:(int) age{
self->age = age;
}
-(int)age{
return age;
}
@property int _age;
-(void)set_age:(int) _age;
-(int)_age;
@property NSString *name;
-(void)setName:(NSString*) name;
-(NSString*)name;
(2)@synthesize 关键字
@synthesize 变量名;
自动帮我们实现对应的get和set方法
@synthesize age,_age;
@synthesize 相当于帮我们实现了下面的方法
-(void)setAge:(int) age{
self->age = age;
}
-(int)age{
return age;
}
@synthesize name;
(3)@synthesize name = _b;
{
NSString *name;
NSString *_b;
}
@property NSString *name;
@synthesize name; // get和set方法设定的是 name的值
@synthesize name = _b; //相当于操作_b的值
-(void)setName:(NSString *) name{
_b = name;
}
-(NSString *)name{
return _b;
}
注意:在4.4之前,@property和@synthesize成对出现
2)@property 在Xcode4.4之后(@property增强)
增强使用:
@property int score;
1).h文件中 帮我们声明 setScore(setter) 和 score(getter)方法
2).m 中帮我们生成 _score的私有变量(在外部不能访问,不能被子类继承)
3).m 中帮我们实现 get和set方法
3、@synthesize的使用
4、动态类型&id类型
动态类型:程序在运行的时候,才能确定对象属于什么类型
静态类型:程序编译的时候,就确定了对象的类型
动态类型的体现: 多态,父类指针可以指向子类对象
NSObject 是所有类的基类
NSObject *obj = [Dog new];
obj = [Person new];
父类调用子类特有的方法
[(Person *)obj eat];
//id类型,id类型又被称为 万能指针。
id obj; //运行时检查
obj = [Car new];
[(Car*)obj stop];
5、动态类型检测的方法
7个方法
1)对象所属关系判断
对象是否是指定类或者子类的实例对象
isKindofClass
对象是否是指定类的实例对象
isMemberOfClass
类是否是另外一个类的子类
isSubclassOfClass
2)判断能否响应方法
对象是否能够响应方法
类是否能够响应方法
类去响应方法
3)响应方法
传参数
6、构造方法的使用
[Person new];
-> [Person alloc]; //空间申请完后,不能立即使用,有可能会导致意想不到的错误
-> [[Person alloc] init];
[Person new]; 会把我们的成员变量的值,默认的设置为0
init 是我们OC类的一个构造方法
构造方法是类创建的时候,默认调用的
init 是继承自 NSObject 的
在子类中通过重写父类的init方法,指定成员变量初始化值
init方法的固定格式:
-(id)init{
//初始化父类的
//判断是否初始化成功
if(self = [super init]){
//初始化自己的信息
_age = 10;
}
//返回
return self;
}
7、自定义构造方法
如果要指定成员变量值的初始化,需要自定义构造方法
1)一定是对象方法
2)返回值 一般是 id类型
3)一定是以initWith开头
-(id)initWithName:(NSString *) name{
//判断是否初始化成功
if(self = [super init]){
//初始化自己的信息
_name = name;
}
//返回
return self;
}
点语法: 对象名.成员变量名 (点语法不是访问成员变量,而是方法的调用)
它是一个编译器特性
点语法作用:可以替换传统的get和set方法的调用
点语法的前提:
首先得先有 get和set方法
点语法实质:
调用get和set方法
如果点语法出现在 = 的左边,表示设置值,相当于调用了set方法
p.age = 10;
替换为:[p setAge:10];
如果点语法出现在 = 的右边,表示获取值,相当于调用了get方法
int age = p.age;
替换为:int age = [p age];
替换为:[p dispAge:p.age];
[p dispAge:[p age]];
注意:
点语法实质是调用get和set方法,所以,如果没有定义成员变量的get和set方法,这个时候,是不能使用点语法的。
2、@property使用、增强
1)@property 在Xcode4.4之前的使用方法
(1)只是用@property作为方法的声明‘
格式:@property int age; 表示帮我们生成一个get和set age的方法
{
int age;
int _age;
NSString *_name;
}
@property int age;
-(void)setAge:(int) age;
-(int)age;
//手工实现 get和set方法
-(void)setAge:(int) age{
self->age = age;
}
-(int)age{
return age;
}
@property int _age;
-(void)set_age:(int) _age;
-(int)_age;
@property NSString *name;
-(void)setName:(NSString*) name;
-(NSString*)name;
(2)@synthesize 关键字
@synthesize 变量名;
自动帮我们实现对应的get和set方法
@synthesize age,_age;
@synthesize 相当于帮我们实现了下面的方法
-(void)setAge:(int) age{
self->age = age;
}
-(int)age{
return age;
}
@synthesize name;
(3)@synthesize name = _b;
{
NSString *name;
NSString *_b;
}
@property NSString *name;
@synthesize name; // get和set方法设定的是 name的值
@synthesize name = _b; //相当于操作_b的值
-(void)setName:(NSString *) name{
_b = name;
}
-(NSString *)name{
return _b;
}
注意:在4.4之前,@property和@synthesize成对出现
2)@property 在Xcode4.4之后(@property增强)
增强使用:
@property int score;
1).h文件中 帮我们声明 setScore(setter) 和 score(getter)方法
2).m 中帮我们生成 _score的私有变量(在外部不能访问,不能被子类继承)
3).m 中帮我们实现 get和set方法
3、@synthesize的使用
4、动态类型&id类型
动态类型:程序在运行的时候,才能确定对象属于什么类型
静态类型:程序编译的时候,就确定了对象的类型
动态类型的体现: 多态,父类指针可以指向子类对象
NSObject 是所有类的基类
NSObject *obj = [Dog new];
obj = [Person new];
父类调用子类特有的方法
[(Person *)obj eat];
//id类型,id类型又被称为 万能指针。
id obj; //运行时检查
obj = [Car new];
[(Car*)obj stop];
5、动态类型检测的方法
7个方法
1)对象所属关系判断
对象是否是指定类或者子类的实例对象
isKindofClass
对象是否是指定类的实例对象
isMemberOfClass
类是否是另外一个类的子类
isSubclassOfClass
2)判断能否响应方法
对象是否能够响应方法
类是否能够响应方法
类去响应方法
3)响应方法
传参数
6、构造方法的使用
[Person new];
-> [Person alloc]; //空间申请完后,不能立即使用,有可能会导致意想不到的错误
-> [[Person alloc] init];
[Person new]; 会把我们的成员变量的值,默认的设置为0
init 是我们OC类的一个构造方法
构造方法是类创建的时候,默认调用的
init 是继承自 NSObject 的
在子类中通过重写父类的init方法,指定成员变量初始化值
init方法的固定格式:
-(id)init{
//初始化父类的
//判断是否初始化成功
if(self = [super init]){
//初始化自己的信息
_age = 10;
}
//返回
return self;
}
7、自定义构造方法
如果要指定成员变量值的初始化,需要自定义构造方法
1)一定是对象方法
2)返回值 一般是 id类型
3)一定是以initWith开头
-(id)initWithName:(NSString *) name{
//判断是否初始化成功
if(self = [super init]){
//初始化自己的信息
_name = name;
}
//返回
return self;
}
《OC疯狂讲义》笔记(五)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。