OC基础-id+构造方法+自定义构造方法+分类Category
来源:互联网 发布:一个月淘宝可以退货吗 编辑:程序博客网 时间:2024/05/21 07:56
<1>id类型
1. 是一个万能指针,可以指向/操作任何一个OC对象
2. id类型的变量本身就是一个指针类型
<2>构造方法
1. new方法的实现实际上是分为两步的,1.分配存储空间,调用+alloc方法;2.初始化,调用-init方法
1>调用+alloc方法
Person *p1 = [Person alloc];
2>Person *p2 = [p1 init];
但可以写成下面的一句(以后会经常这样写,中括号套一个中括号,而且new就不常用了)
Person *p = [[Person alloc] init]; // 这个init就是构造方法
构造方法: 用来初始化对象的方法,是一个对象方法
(在需要的类中)重写-init方法: - (id)init**** //有固定的格式,如下:
// 1.一定要先调用回super的init方法:初始化父类中声明的一些成员变量和其他属性
self = [super init]; // 当前对象 self
// 2.如果初始化成功,才有必要进行接下来的初始化
if(self != nil){ // 初始化成功
_age = 10;
}
// 3.返回一个已经初始化完毕的对象
return self;
可以进一步压缩代码长度
if(self = [super init]){
_age = 10;
}
return self;
这时候调用这个重写后的init方法,每个新创建的对象的 _age 都是 10。
重写构造方法的目的:为了让对象被创建出来的时候,它的成员变量就会有一些固定的值
2. 重写构造方法的注意点:
1>先调用父类的构造方法([super init])
2>再进行子类内部成员变量的初始化
3. 如果子类和父类有相同的方法,优先调用子类的方法,这时又会调用父类的init([super init]吗,一级一级往上调,一直调到NSObject根类为止),然后再一级一级的回到原始地方,[有点像递归] [基础0808-构造方法1------35:35——39:20以及构造方法2的前10分半钟]
4. 可以使用Xcode的断点功能来跟踪程序流程
5. 成员变量统统以下划线开头
<3>自定义构造方法
1. 自定义构造方法的规范:
1>一定是对象方法
2>返回值一般是id类型
3>方法名一般以initWith开头
2. 哪个类的属性就交给哪个类的方法来实现,各管各的,不要插手别人的事,面向对象的思想
<4>分类(OC特有的语法) Category:分类,类别,类目
1. 分类的作用:可以给某一个类扩充一些方法(在不修改原来类的代码文件,不建立继承关系的前提下)另建一个文件(类),如果要用到这个类里的方法,就要包含该类的头文件,格式:
//声明
@interface 被扩充的类的类名 (分类名称)
@end
//实现
@implementation 被扩充的类的类名 (分类名称)
@end
2. 分类的文件名就是”被扩充类的类名+分类名称.h” ”被扩充类的类名+分类名称.m”
3. 使用注意
1>分类只能增加方法,不能增加成员变量
2>分类的方法实现中可以访问原来类中声明的成员变量
3>分类可以重新实现被扩充类中的方法,但是会覆盖掉原来类中的方法,会导致原来的方法没法再使用
4>方法调用的优先级:分类 —-> 被扩充类 —-> 父类
5>如果两个分类中有相同的方法,使用谁,取决于最后编译谁(跟编译顺序有关,这个可以在Xcode中查看)
4. 编译只编译源文件 .m/.c .h文件是不编译的
5. 给系统自带的类添加分类,因为开发中系统自带的类不能满足我们的需求
.这里的一个例子是计算一个字符串中有几个数字,所以要建立NSString类的一个分类,特别的再记录一下,字符串本身也是一个对象
6. 网上有很多的开源的类库,这些类都是一些写好的针对不同需求的分类
1. 是一个万能指针,可以指向/操作任何一个OC对象
2. id类型的变量本身就是一个指针类型
<2>构造方法
1. new方法的实现实际上是分为两步的,1.分配存储空间,调用+alloc方法;2.初始化,调用-init方法
1>调用+alloc方法
Person *p1 = [Person alloc];
2>Person *p2 = [p1 init];
但可以写成下面的一句(以后会经常这样写,中括号套一个中括号,而且new就不常用了)
Person *p = [[Person alloc] init]; // 这个init就是构造方法
构造方法: 用来初始化对象的方法,是一个对象方法
(在需要的类中)重写-init方法: - (id)init**** //有固定的格式,如下:
// 1.一定要先调用回super的init方法:初始化父类中声明的一些成员变量和其他属性
self = [super init]; // 当前对象 self
// 2.如果初始化成功,才有必要进行接下来的初始化
if(self != nil){ // 初始化成功
_age = 10;
}
// 3.返回一个已经初始化完毕的对象
return self;
可以进一步压缩代码长度
if(self = [super init]){
_age = 10;
}
return self;
这时候调用这个重写后的init方法,每个新创建的对象的 _age 都是 10。
重写构造方法的目的:为了让对象被创建出来的时候,它的成员变量就会有一些固定的值
2. 重写构造方法的注意点:
1>先调用父类的构造方法([super init])
2>再进行子类内部成员变量的初始化
3. 如果子类和父类有相同的方法,优先调用子类的方法,这时又会调用父类的init([super init]吗,一级一级往上调,一直调到NSObject根类为止),然后再一级一级的回到原始地方,[有点像递归] [基础0808-构造方法1------35:35——39:20以及构造方法2的前10分半钟]
4. 可以使用Xcode的断点功能来跟踪程序流程
5. 成员变量统统以下划线开头
<3>自定义构造方法
1. 自定义构造方法的规范:
1>一定是对象方法
2>返回值一般是id类型
3>方法名一般以initWith开头
2. 哪个类的属性就交给哪个类的方法来实现,各管各的,不要插手别人的事,面向对象的思想
<4>分类(OC特有的语法) Category:分类,类别,类目
1. 分类的作用:可以给某一个类扩充一些方法(在不修改原来类的代码文件,不建立继承关系的前提下)另建一个文件(类),如果要用到这个类里的方法,就要包含该类的头文件,格式:
//声明
@interface 被扩充的类的类名 (分类名称)
@end
//实现
@implementation 被扩充的类的类名 (分类名称)
@end
2. 分类的文件名就是”被扩充类的类名+分类名称.h” ”被扩充类的类名+分类名称.m”
3. 使用注意
1>分类只能增加方法,不能增加成员变量
2>分类的方法实现中可以访问原来类中声明的成员变量
3>分类可以重新实现被扩充类中的方法,但是会覆盖掉原来类中的方法,会导致原来的方法没法再使用
4>方法调用的优先级:分类 —-> 被扩充类 —-> 父类
5>如果两个分类中有相同的方法,使用谁,取决于最后编译谁(跟编译顺序有关,这个可以在Xcode中查看)
4. 编译只编译源文件 .m/.c .h文件是不编译的
5. 给系统自带的类添加分类,因为开发中系统自带的类不能满足我们的需求
.这里的一个例子是计算一个字符串中有几个数字,所以要建立NSString类的一个分类,特别的再记录一下,字符串本身也是一个对象
6. 网上有很多的开源的类库,这些类都是一些写好的针对不同需求的分类
0 0
- OC基础-id+构造方法+自定义构造方法+分类Category
- OC构造方法、Category
- 黑马程序员------OC基础-----点语法、id、构造方法、Category、成员变量作用域
- 黑马程序员——OC基础---核心语法(id,构造方法,Category,description,SEL)
- OC--Id和构造方法
- oc构造方法与分类
- 黑马程序员——OC语言学习——关键字id、构造方法、Category-分类、类的本质、 description方法、 SEL方法
- 黑马程序员_iOS开发之OC之面向对象之id语法、构造方法、@category分类、类本质、description方法和SEL数据类型
- 黑马-OC语法-自定义构造方法和分类
- OC基础——点语法、@property、id、构造方法
- IOS开发---OC语言-⑭id、构造方法、自定义构造方法
- OC基础—构造方法
- oc中的id关键字和构造方法
- OC中重写构造方法及自定义构造方法
- 黑马程序员——OC—构造方法和Category
- 黑马程序员--oc自定义构造方法
- OC基础第五章:构造方法
- 构造方法,自定义构造方法
- [转]Hulu 2013北京地区校招笔试题
- STL源码剖析——STL算法之permutation排列组合
- 新手引导的2种做法
- 沟通和编程一样,也是一门艺术系列4(沟通的原则)
- .net中几个经常用到的字符串的截取
- OC基础-id+构造方法+自定义构造方法+分类Category
- 浅谈优秀程序员电脑环境配置
- OC基础-类的本质+description+SEL
- 学习视频编程的记录
- C#,.net获取字符串中指定字符串的个数、所在位置与替换字符串
- [转]2013年海康威视校园招聘笔试题
- OC基础-内存管理-引用计数器+set方法
- 迈入大学,我要做最优秀的"程序猿"。
- OC基础-内存管理-@property以及它的参数