黑马程序员-我的第十一篇学习日记:OC构造方法和分类的使用
2014-04-07 19:12
393 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一.构造方法
构造方法是用来初始化对象的方法,是一个对象方法以“-”开头
如:-(id) init
重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值
1.重写构造方法的注意点
先调用父类的构造方法[superinit]
再调用子类内部成员变量的初始化
2.书写规范
一定是对象方法,一定“-”开头
返回值一般是id 类型
方法名一般以init 开头
如:
-(id) init
{
if (self = [superinit]) //固定写法:为了让对象创建出来,成员变量有一些固定的值
{
_age= 10; //可以动态改变成员变量
}
return self;
}
二 . 分类
分来可以给某个类扩充一些方法(不能修改原来的代码)
分类的作用:在不改变原来内容的基础上,可以为类增加一些方法
写法格式:
@interface 类名(分类名称)
@end
@implementation 类名(分类名称)
如:
@interface Person(MJ)
@end
@implementation Person(MJ)
@end
分类的使用注意:
1.分类只能增加方法,不能增加成员变量
@interface Person(MJ)
-(void)run;
@end
2.分类方法实现中可以访问原来类中的成员变量
@interface Person(MJ)
-(void)fangFa;
@end
@implementation Person(MJ)
-(void)fangFa
{
NSLog(@"%f", _wegiht);
}
@end
3.分类可以重新实现原来类中的方法,但是覆盖原来的方法,会导致原来的方法,无法 使 用
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Person+MJ.h"
@interface Person //人这个类的声明
-(void)run; //方法声明
@end
@implementation Person //人这个类实现
-(void)run //方法实现
{
NSLog(@"人跑起来");
}
@end
@interface Person(MJ) //人分类的声明
-(void)run; //方法声明
@end
@implementation Person(MJ) //人分类的实现
-(void)run //方法实现
{
NSLog(@"分类跑起来");
}
@end
int main()
{
Person *p = [[Person alloc]init];
[p run]; //调用方法
}
程序结果是:分类跑起来
在主函数调用run方法,原来类中的run方法被覆盖了,调用了分类中的run方法
4.方法调用的优先级:分类最后参与编译的分类优先 -> 原来类 -> 父类
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一.构造方法
构造方法是用来初始化对象的方法,是一个对象方法以“-”开头
如:-(id) init
重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值
1.重写构造方法的注意点
先调用父类的构造方法[superinit]
再调用子类内部成员变量的初始化
2.书写规范
一定是对象方法,一定“-”开头
返回值一般是id 类型
方法名一般以init 开头
如:
-(id) init
{
if (self = [superinit]) //固定写法:为了让对象创建出来,成员变量有一些固定的值
{
_age= 10; //可以动态改变成员变量
}
return self;
}
二 . 分类
分来可以给某个类扩充一些方法(不能修改原来的代码)
分类的作用:在不改变原来内容的基础上,可以为类增加一些方法
写法格式:
@interface 类名(分类名称)
@end
@implementation 类名(分类名称)
如:
@interface Person(MJ)
@end
@implementation Person(MJ)
@end
分类的使用注意:
1.分类只能增加方法,不能增加成员变量
@interface Person(MJ)
-(void)run;
@end
2.分类方法实现中可以访问原来类中的成员变量
@interface Person(MJ)
-(void)fangFa;
@end
@implementation Person(MJ)
-(void)fangFa
{
NSLog(@"%f", _wegiht);
}
@end
3.分类可以重新实现原来类中的方法,但是覆盖原来的方法,会导致原来的方法,无法 使 用
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Person+MJ.h"
@interface Person //人这个类的声明
-(void)run; //方法声明
@end
@implementation Person //人这个类实现
-(void)run //方法实现
{
NSLog(@"人跑起来");
}
@end
@interface Person(MJ) //人分类的声明
-(void)run; //方法声明
@end
@implementation Person(MJ) //人分类的实现
-(void)run //方法实现
{
NSLog(@"分类跑起来");
}
@end
int main()
{
Person *p = [[Person alloc]init];
[p run]; //调用方法
}
程序结果是:分类跑起来
在主函数调用run方法,原来类中的run方法被覆盖了,调用了分类中的run方法
4.方法调用的优先级:分类最后参与编译的分类优先 -> 原来类 -> 父类
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员-我的第六篇学习日记:OC方法的使用,对象方法与函数的区别
- 黑马程序员——OC语言学习——关键字id、构造方法、Category-分类、类的本质、 description方法、 SEL方法
- 黑马程序员——OC学习小结------构造方法,分类,方法的重写,SEL
- 黑马程序员之ios学习总结——10 OC语言的构造方法和分类
- 黑马程序员———OC学习第四天(构造方法及分类)
- 【黑马程序员】-我的OC学习笔记(3)-存取器方法和构造方法重写
- 黑马程序员----OC学习NSString使用方法
- 黑马程序员-我的第十二篇学习日记:OC中空指针,野指针,僵尸对象,retain和release基本使用
- 黑马程序员————OC的构造方法与分类知识点总结
- 黑马程序员学习笔记14_OC之构造方法
- 黑马程序员-我的第十三篇学习日记:OC中dealloc方法和@property作用
- 黑马程序员:OC学习日记之方法和函数
- 黑马程序员 OC------- id类型: 构造方法学习
- 黑马程序员——OC基础学习(三)---从传统setter方法和getter方法到@property增强型使用(体验代码的优化过程)
- 黑马程序员-我的第十四篇学习日记:OC中autorelease的使用
- 黑马程序员---OC学习笔记之分类(Catgory)的概念及使用
- 黑马程序员 -- OC语言 NSString使用 点语法 构造 分类
- 黑马程序员-[OC]学习之旅-NSString使用和方法
- 黑马程序员_OC分类和构造方法
- 黑马程序员——OC学习——@property和构造方法