OC基础--构造方法

OC语言中类的构造方法学了两种:

一、方法一:[类名  new]  例:[Person  new]

  缺点:可扩展性不强,假如在Person类中有_age 成员变量,在初始化时想让_age 中的值为20,new方法办不到,只能是创建类之后重新赋值

二、方法二:

      //返回一个已经分配好内存的对象,但是这个对象没有经过初始化

      Person *p = [Person alloc];

      //给指针变量p指向的对象进行初始化操作

      p = [p init];

      合并写法,以后常用:类名 *指针变量名 =  [[类名 alloc] init];例----->Person *p = [[Person alloc] init];

原理:new方法内部其实做了两件事:

1.分配内存给对象  +alloc--->类方法

2.初始化对象  -init--->对象方法,init方法称为构造方法,构造方法其实是用来初始化对象的。

三、自定义构造函数注意事项-->重写-(id) init方法,其中:

  1)id是万能指针,不要再加上*;id类型能指向任何OC对象

  2)先要初始化父类中的成员变量-->[super init]

  3)将返回的指向父类对象的指针变量赋值给self,也就是当前类-->self = [super init];

  4)一定判断self是否为空if(self != nil) 或者 if(self)-->如果self中没有父类的地址,self就等于0,也就是false

代码如下:

 1 -(id) init
 2 {
 3     //为了让父类中的成员变量也能初始化
 4     self = [super init];
 5     if (self != nil)//判断self不为空,说明父类初始化成功
 6     {
 7         _age = 20;//想要初始化的属性或其他
 8     }
 9     return self;//构造函数一定是返回当前类
10 }

必须简写:-->以后常用的方式

 1 - (id) init
 2 {
 3     // 为了让父类中的成员变量也能初始化
 4     if (self = [super init])
 5     { // 说明父类初始化成功
 6         _age = 20;
 7     }
 8
 9     return self;
10 }

四、自定义构造方法代码实例:

 1 #import <Foundation/Foundation.h>
 2 // 声明
 3 @interface Person : NSObject
 4 {
 5     int _age;
 6 }
 7 - (void) setAge:(int)newAge;
 8 - (int) age;
 9
10 // 自定义构造方法
11 /*
12  规范:
13  1.返回值是id类型
14  2.方法名都以init开头
15  */
16 - (id) initWithAge:(int)age;
17
18 @end
19
20 // 实现
21 @implementation Person
22 - (void) setAge:(int)newAge
23 {
24     _age = newAge;
25 }
26
27 - (int) age
28 {
29     return _age;
30 }
31
32 - (id) initWithAge:(int)age
33 {
34     if (self = [super init])
35     {
36         _age = age;
37     }
38     return self;
39 }
40
41 @end
42
43
44 int main()
45 {
46     /*
47     [Person new];
48     [[Person alloc] init];
49      */
50     Person *p = [[Person alloc] initWithAge:28];
51
52     NSLog(@"age=%d", [p agec]);
53
54     return 0;
55 }
时间: 2024-11-03 22:05:10

OC基础--构造方法的相关文章

OC基础--构造方法 id类型

new方法实现原理: new做了三件事情 1.开辟存储空间  + alloc 方法 2.初始化所有的属性(成员变量) - init 方法 3.返回对象的地址 [Person new]; == [[Person alloc] init]; alloc: 1.开辟存储空间 2.将所有的属性设置为0 3.返回当前实例对象的地址 init:  1.初始化成员变量, 但是默认情况下init的实现是什么都没有做 2.返回初始化后的实例对象地址 注意: alloc返回的地址, 和init返回的地址是同一个地址

OC基础-关于构造方法

一 init的疑惑 init是OC的构造方法,也即是初始化方法.init常见于创建对象实例,假如现有Person这个类,新建一个Person对象实例时: Person *person = [ [Person alloc] init]; 以上代码执行的时候,实际实现了以下三个过程: 向Person类发送了alloc消息,在堆内存中创建了该类的对象 对象收到init消息后,进行对象的初始化 返回对象中堆内存中的地址,赋值给person指针变量 1 未重写init方法 给对象分配内存空间后,需要初始化

黑马程序员---OC基础5【点语法】【@property关键字】【@synthesize关键字】【id类型】【动态类型】【构造方法】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [点语法] 1 1.使用“点语法” 2 Student *stu= [[Student alloc]init]; 3         //调用set方法 4         [stu setAge:20]; 5         [stu setName:@"Jone"]; 6         //点语法:xcode的特性,Xcode帮我们做了代码替换 7         //点语法,

OC基础(七)构造方法与自定义构造方法

一.构造方法 在OC中构造方法是init开头的方法, 用于初始化一个对象, 让某个对象一创建出来就拥有某些属性和值. 构造方法属于对象方法,以“-”开头 例如:在创建对象的时候就调用了init方法. Person *p = [[Person alloc] init]; 可以分解为 Person *p1 = [Person alloc]; //分配空间 Person *p = [p1 init];  //初始化对象,即调用init方法 书写格式: - (instancetype)init { se

OC基础 04

OC 基础04 [email protected]基本概念 >[email protected]是编译器的指令 >[email protected] 用在声明文件中告诉编译器声明成员变量的的访问器(getter/setter)方法 这样的好处是:免去我们手工书写getter和setter方法繁琐的代码 @property基本使用 1.在@inteface中,用来自动生成setter和getter的声明 示例: 用@property int age; // 就可以代替下面的两行 - (int)a

黑马程序员--oc基础第十篇(foundation框架下、集合)

十 . oc基础(Foundation框架下) 1.下面介绍几种OC对象类型的存储结构:NSArray,NSDictionary,NSSet,以及基本数据类型封装类. NSNumber:*既然这几种数据结构都是用来存放对象类型的那么基本数据类型想要放入其中就要先对他们进行封装.使用NSNumber对基本数据类型进行封装. // // Created by keeganlee on 15/3/2. // Copyright (c) 2015年 keeganlee. All rights reser

OC的构造方法与分类知识点总结

OC语言构造方法: 用来初始化对象的方法,对象方法,以减号开头 为了让对象创建出来,成员变量就会有一些固定的值 重写构造方法的注意点: 先调用父类的构造方法([super init]) 再进行子类内部成员变量的初始化 参考:http://www.codes51.com/article/detail_111604.html 构造方法的调用: 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情, 1)使用alloc方法来分配存储

OC基础01

搜索 "==>" 寻找标记 OC基础总结: Objective-C具有相当多的动态特征,如: " 动态类型 , 动态绑定 , 动态加载" ==> copy mutableCopy 浅复制: 在复制操作中,对于被复制的对象的每一层复制都是指针复制. 深复制: 在复制操作中,对于被复制的对象至少有一层是对象复制 完全复制: 在复制操作中,对于被复制的对象的每一层都是对象复制. 一般来讲: 浅复制复制引用对象的指针 深复制 复制引用对象的内容 retain &

【OC基础语法考试】

OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请OC老鸟来喷~~ 试题如下: 1.将包含以下三个字符串@“1hello“,@“2word“,@”3good“的数组改写为字典,数字部分作为key,英文部分作为value.(15) 2.建立一个数组对象,使用3个不同的方法,使其引用计数增加为4,输出这个值,然后保证内存能够正确释放.(15) 3.使用