A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© S970028126 中级黑马   /  2015-6-28 16:18  /  1120 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 S970028126 于 2015-6-29 11:58 编辑

构造方法:        
        Person *p = [Person new];
                //完整的创建一个可用的对象(new方法):
                        1.分配存储空间  +alloc
                        2.初始化        -init

                new方法:
                        1.调用+alloc分配存储空间
                                Person *p1 = [Person alloc]
                        2.调用-init进行初始化
                                Person *p2 = [p1 init];
                        可以写为一句:
                                Person *p3 = [[person alloc] init];(常用)
               
        构造方法:用来初始化对象的方法,是个对象方法,减号开头
        init方法属于NSObject类,将所用成员变量初试为0

        在@implementation中重写-init方法
                - (id)init  //类型不确定,Person,Cat
                {
                        //1.一定要调用回super的init方法,目的是初试化父类声明的一些成员变量和其他属性
                        self = [super init];// 返回当前对象self

                        //2.如果对象初始化成功,才有必要进行接下来的初始化
                        if (self != nil)// 可以直接写if ( self )
                        {
                                //初始化成功
                                _age = 10;
                        }
                        //3.返回一个已经初始化完毕的对象
                        return self;
                }//每个对象创建出来_age都是10

                最精简的写法:
                        - (id)init
                        {
                                if (self = [super init])
                                {
                                        _age = 10;
                                }
                                return self;
                        }

        重写构造方法的目的:为了让对象创建出来,成员变量就会有固定的值
        重写构造方法的注意点:        
                1.先调用父类的构造方法 [super init]
                2.再进行子类内部成员变量的初始化

      自定义构造方法
                1.一定是对象方法,一定以-开头
                2.返回值一般是id类型
                3.方法名一般以init开头

        - (id)initWithName: (NSString *)name;
        - (id)initWitgAge: (int)age;
        - (id)initWithName: (NSString *)name andAge: (int)age
举例:一些构造方法
        -(id)init
        {
                if(self = [super init])
                {
                        _name = @"jack";
                }
                return self;
        }

        - (id)initWithName: (NSString*)name
        {
                if (self = [super init])
                {
                        _name = name;
                }
                return self;
        }

        - (id)initWitgAge: (int)age
        {
                if (self = [super init])
                {
                        _age = age;
                }
                return self;
        }

        - (id)initWithName: (NSString *)name andAge: (int)age
        {
                if (self = [super init])
                {
                        _name = name;
                        _age = age;
                }
                return self;
        }
       注意: 父类的属性交给父类去处理,子类方法处理子类自己的,不要在子类中处理父类的
        - (id)initWithName: (NSString *)name andAge: (int)age andNo: (int)no
        {
                if (self = [super initWithName:name andAge: age])//将name age 传到父类方法中进行初始化
                {
                        _no =no;
                }               
                return self;
        }
      @end


4 个回复

倒序浏览
没看懂 不过还是顶一下
回复 使用道具 举报
学习学习!
回复 使用道具 举报
刚好需要!!谢谢
回复 使用道具 举报
挺好,学习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马