oc基础知识

来源:互联网 发布:高校搜答案软件 编辑:程序博客网 时间:2024/05/16 12:29

                   基础知识(构造方法)

构造方法:用来初始化对象的方法,是个对象方法。(以 -开头)

完整的创建了一个可用对象。

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"]; 直接初始化完后直接赋值。

 

 

 

 

 

 

 

 

 

 

0 0