OC构造方法

构造方法
我们创建一个对象的时候一般喜欢直接调用一个类方法,比如有一个Person类,我们为这个Person类创建对象一般是直接这样[Person new];其实new是NSObject中的一个类方法,这个new方法中是先调用了alloc方法,alloc方法也是一个类方法,作用是创建这个类的对象,再将这个对象的指针返回;再调用创建的对象的对象方法init,作用是初始化创建的对象的属性,然后返回这个已经被初始化的对象。
比如: Person *p1 = [Person new];
完全等价于:
Person *p1 = [[Person alloc] init];
init方法叫做构造方法,它是定义于NSObject类中的一个对象方法,这个方法主要就是初始化所有的属性,基本类型属性初始化为0,非OC类型属性初始化为NULL,OC类型属性初始化为nil。因此,在默认情况下,我们创建一个对象,初始化完毕后,这个对象的属性都是有默认值的。
但是,如果我们想创建一个对象时对象的属性的默认值不是0、NULL、nil的时候,我们应该重写构造方法。重写构造方法步骤如下:
1). 先调用父类的init方法 来初始化父类的属性.
2). 将调用父类的init方法返回的对象赋值给self
3). 判断调用父类的init方法是否初始化成功
4). 如果成功,再初始化当前子类对象的属性.
5). 返回1个被完全初始化的对象. 返回self
6). 应该再写一个类方法,返回[[self alloc] init]

- (instancetype)initWithxxxx:(参数类型)参数列表
{
if(self = [super init])
{
初始化当前子类对象的属性.
}
return self;
}

+ (instancetype)类名Withxxxx:(参数类型)参数列表
{
return [[self alloc] init];
}

时间: 2024-12-15 12:06:52

OC构造方法的相关文章

<<黑马程序员>>OC构造方法

构造方法: ①  用来初始化对象的方法        ②   肯定是对象方法        ③   目的:使创建出来的对象都有一个默认是属性 创建对象的方式: 一 :   Person   *p  =  [ Person  new]              ①  创建对象会有两个步骤                  Person  *p  = [ Person  alloc ]     //  调用类方法 alloc 来分配存储空间                  Person  *p1

OC 构造方法

一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法来分配存储空间(返回分配的对象):2)使用init方法来对对象进行初始化. 可以把new方法拆开如下: 1.调用类方法+alloc分配存储空间,返回未经初始化的对象 Person *p1=[person  alloc]; 2.调用对象方法-init进行初始化,返回对象本身 Person *p2=[p1 init];

OC基础复习(六)之构造方法小结

写到这里心慌慌的,压力骤然而起, 1.什么是构造方法? OC构造方法 构造方法我们创建一个对象的时候一般喜欢直接调用一个类方法,比如有一个Person类,我们为这个Person类创建对象一般是直接这样[Person new];其实new是NSObject中的一个类方法,这个new方法中是先调用了alloc方法,alloc方法也是一个类方法,作用是创建这个类的对象,再将这个对象的指针返回:再调用创建的对象的对象方法init,作用是初始化创建的对象的属性,然后返回这个已经被初始化的对象.比如: Pe

Objective-C基础学习笔记(六)-property作用-构造方法-OC成员变量的作用域

一. 点语法 点语法的本质是方法调用,并不是访问成员变量,编译器看到点语法有两种处理 1 .是赋值,赋值的就是展开为set方法 2. 不是赋值:展开为set方法 使用示例: Person类的声明: 点语法的测试: 二. OC成员变量的作用域 @public :任何地方访问 @private :只能在当前类的对象方法中直接访问 @protected :能在当前类和子类中直接访问(默认) @package :只要处于同一个框架中就能直接访问对象成员变量   三. @property 与 @synth

OC的SEL和id

SEL s2 = @selector(eat:); [ani performSelector:s2 withObject:@"一块沾有粑粑的棒棒糖"]; [ani performSelector:@selector(eat:andFoodName:) withObject:@"班长养的恶狗"withObject:@"一块沾有粑粑的棒棒糖"]; SEL(是一个包含地址的类型) 22)id类型: NSObject和id类型都可以指向任何对象 NSOb

objective-c 语法快速过(4)

oc 里的字符串 字符串的快速创建(最简单的方法) NSStirng *str = @“Hello”;//oc的字符串都是@“”形式的 oc的字符串也是类的对象,是NSString类的对象,创建没有那么麻烦不用[ ],使用面向对象的思想来操纵字符串. char *name = "xxxxx";//c风格字符串 oc使用 %@ 输出字符串,不是%s NSString *name = @”dashuai”; NSLog(@“我的名字是%@”, name); c 风格字符串输出解析的用法是%

OC基础--构造方法

OC语言中类的构造方法学了两种: 一.方法一:[类名 new] 例:[Person new] 缺点:可扩展性不强,假如在Person类中有_age 成员变量,在初始化时想让_age 中的值为20,new方法办不到,只能是创建类之后重新赋值 二.方法二: //返回一个已经分配好内存的对象,但是这个对象没有经过初始化 Person *p = [Person alloc]; //给指针变量p指向的对象进行初始化操作 p = [p init]; 合并写法,以后常用:类名 *指针变量名 =  [[类名 a

第一部分 1.10 OC基础语法-点语法、构造方法、结构体

一.点语法 新建一个person类 #import <Foundation/Foundation.h> @interface Person : NSObject { int _age; } - (void)setAge:(int)age; // 方法名是setAge: - (int)age; // 方法名是age // 方法名是setAge:andNo: // - (void)setAge:(int)newAge andNo:(int)no; @end #import "Person

OC语法4——自定义构造方法,description方法

自定义构造方法: 我们已经知道创建对象分两步,1:在内存中开辟存储空间,并把地址存储在指针变量里,2:调用指针变量的初始化方法init初始化该对象. Student * stu = [Student alloc]; stu = [stu init]; 在这里,init方法是系统原始的初始化方法,但有时我们需要重写该初始化方法,使其在创建该对象的同时赋予它属性的值. 假如,我们现在要重写原始初始化方法,使其创建一个有年龄(age)的stu. 首先,在Student.h中声明自定义方法: - (id