基础知识(构造方法)构造方法:用来初始化对象的方法,是个对象方法。(以 -开头)
完整的创建了一个可用对象。
1,分配存储空间 ,+alloc 方法。
2,初始化 -init 方法。
[person new] 中 new 会调用以上两个方法创建,new方法是 alloc 和 init 的组合体。
分解步骤:1,调用+alloc 分配存储空间。
Person *p1 = [Person alloc];
2,调用 _init 进行初始化
Person *p2 = [Person init];
整合步骤: Person *p3 = [[Person alloc] init ];
构造方法就是 init 方法。
重写构造方法的目的是:
为了让对象创造出来的成员变量,就会有一些固定的值。
重写构造方法(init方法)的条件:
1,一定要调用super的init 方法[super init]:初始化父类中声明的一些成员变量和其他属性。
2,如果对象初始化成功,才有必要进行接下来的初始化。
3,返回一个已经初始化完毕的对象。
重写构造方法的注意点:
1,先调用父类的构造方法。[super init];
2,在进行子类内部成员变量的初始化。
构造方法(init方法)首先要调用alloc方法,返回好一个分配好内存的Person对象。[Person alloc];
然后再调用Person对象的init方法进行初始化。
父类声明的成员变量,实际上这些成员变量也存在于子类对象里边,只要你继承了某一个类,
父类里所有的成员变量你都能拥有。(继承关系)。
所有调用[super init]的目的,就是初始化父类中声明中的一些成员变量和其他属性。初始化完毕isa指针指向类。
[Person *p] = [[Person alloc] init ];
得到结论:任何对象先初始化父类的东西,在初始化自己。
什么是先初始化父类的东西:就是调用父类的init方法[super init];,返回一个初始化好的对象,其实就是self.
为保证oc中返回的对象与self一样,要进行一个赋值的操作(不要问为什么固定写法),self = [super init];
将右边的值赋值给左边,接下来做判断。
指针如果没有指向任何的空间,里边存储的就是0 ,或用oc中用nil 表示。
self其实就是个指针
if(self != nil) 如果self不等于空,就说明初始化成功。
init方法的写法:
- (id)init 一般用整合后的形式: - (id)init
{ {
self = [super init]; if(self = [super init])
if(self) self 为真 {
{ _成员变量 = 赋值;
_成员变量 = 赋值;
} }
return self; return self;
} }
解释:先调用super 的init方法,然后把值赋值给self,再看self值是否为0;
自定义构造方法:
自定义构造方法的规则:
1,一定是对象方法,一定以-开头。
2,返回值一般是id类型。
3,方法名一般以initWith开头。
@interface Person :NSObject
@property NSString* name;
- (id)initWithName:(NSString *)name
{
if (self = [super init])
{
_name = name;
}
return self;
}
@end
在 int main()
{
Person *p = [[Person allco] init];
p.name = @"Rose"; 等价于[p setName:@"Rose"] set方法 和点语法。
NSLog(@"......");
return ;
}
或者 Person *p = [[Person alloc] initWithName:@"Rose"]; 直接初始化完后直接赋值。
|