OC基础教程6-对象初始化
来源:互联网 发布:人工智能电影剧情简介 编辑:程序博客网 时间:2024/05/08 10:43
前言
Cocoa创建对象是使用alloc和init.
目标
学会对象初始化方法,其实是背下来。
内容
1.分配对象
分配(allocation)是一个新对象诞生的过程,从操作系统获得一块内存,并将其指定为存放对象的实例变量的位置。
向某个类发送alloc消息,就能为类分配一块足够大的内存,以存放该类的全部实例变量,同时alloc方法顺便将这块内存全部初始化为0.
所有的BOOL类型变量被初始化为NO
所有的int类型变量被初始化为0
所有的float类型变量被初始化为0.0
所有指针被初始化为nil
2.初始化对象
与分配对应的操作是初始化。
Car *car = [[Car alloc] init];
而不是:
Car *car = [Car alloc];[car init];
这种嵌套调用的技术非常重要,因为初始化方法返回的对象可能与分配的对象不同。
3.指定初始化函数
类中的某个初始化方法被指派为指定初始化函数,该类的所有初始化方法都使用指定初始化函数执行初始化操作,而子类使用其超类的指定初始化函数进行超类的初始化。
通常,接收参数最多的初始化方法是最终的指定初始化函数。
4.自定义初始化
Person.h
// Person.h // 03_InitDemo #import <Foundation/Foundation.h> @interface Person : NSObject{ NSString *_name; NSInteger _age; } //自定义初始化方法,必须以init开头 - (id)initWithName:(NSString *)name withAge:(NSInteger)age; //打印信息 - (void)showInfo; @end
这里我们定义了一个初始化方法,对名称和年龄进行初始化赋值操作
注:OC中自定义初始化方法的名称必须是以init开头
Person.m
// Person.m // 03_InitDemo #import "Person.h" @implementation Person - (id)initWithName:(NSString *)name withAge:(NSInteger)age{ //固定写法,可以背下来哦~~ //调用父类的初始化方法 self = [super init]; if(self != nil){ _name = name; _age = age; } return self; } - (void)test{ NSLog(@"test"); } - (void)showInfo{ [self test];//调用自己的方法 NSLog(@"name is %@ and age is %d",_name,_age); } @end
这里我们看到了,初始化方法返回的类型是id类型,关于OC中的id类型,可以认为和C语言中的void*是相等的,这种类型在OC中经常被用到,还有就是self关键字的使用,这里的self关键字就相当于Java中的this关键字,指代当前类对象,还有super关键字,这个和Java中的super也是一样的,指代父类对象。还有一个是nil,他就相当于Java中的null,空对象的概念,用于判断的。
同时这里还要记住一点:
以后OC中自定义初始化的方法的模板:
//固定写法,可以背下来哦~~ //调用父类的初始化方法 self = [super init]; if(self != nil){ _name = name; _age = age; } return self;
下面来看一下如何使用初始化方法:
main.m
// main.m // 03_InitDemo #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const charchar * argv[]) { @autoreleasepool { //初始化方法只能调用一次 Person *person = [[Person alloc] initWithName:@"jiangwei" withAge:22]; [person showInfo]; person = [[Person alloc] init]; [person showInfo]; //id类型,类似于void* //但是id类型一般不这么使用,一般会作为方法的返回值和传入的参数类型 id person1 = [[Person alloc] initWithName:@"huangdaoyang" withAge:23]; [person1 showInfo]; } return 0; }
我们使用了我们自定义的方法实例化了一个Person对象出来,同时调用他的showInfo方法,打印结果,这里我们也会发现Person的init方法任然可以使用,这个和Java中是有区别的,
这个init方法是NSObject父类的,可以猜想到这个方法的逻辑功能就是初始化,所以我们在自定义初始化方法的时候,都是会用到这个方法的。
运行结果:
总结+废话
好了,抄别人家的代码就抄到这。
感觉没什么废话好说滴。
- OC基础教程6-对象初始化
- OC中的对象初始化
- oc对象初始化
- OC-对象初始化问题
- OC中的对象初始化方法
- oc对象的初始化方法
- OC中对象的初始化
- 《OC基础教程》读书笔记2-面向对象
- Objective-C基础教程六(对象初始化)
- OC基础回顾(九)对象初始化
- oc语言的特点以及对象初始化
- OC基础教程2-面向对象编程的基础知识
- OC对象初始化-便利的初始化方法
- OC对象初始化-为对象分配空间初始化方法与对象初始化
- 《Objective-C基础教程》第10章 对象初始化
- 《Objective-C基础教程》第10章 对象初始化
- oc-初始化
- OC基础教程8-类别
- jquery中$.post()方法的简单实例【转】
- union和union all的区别
- 【bzoj1821】【jsoi2010】【部落划分】【贪心+并查集】
- 【unity-lua】笔记(备忘)
- 排序算法简介及其C实现
- OC基础教程6-对象初始化
- webview系列问题总结
- TCP、IP的三次握手和四次挥手解析
- Mac OS X 用户与账号介绍
- cocos2dx中的缓冲动作ActionEase类
- WPF--常见属性Label的隐藏和显示
- Spring--quartz中的cronExpression表达式解释
- Noip 备战篇(三)
- Object...args参数详解