首页 > 代码库 > 构造方法

构造方法

// id  == NSObject *// 万能指针,能指向\操作任何OC对象
/*     完整地创建一个可用的对象     1.分配存储空间  +alloc     2.初始化 -init     */
// 构造方法:用来初始化对象的方法,是个对象方法,-开头// 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值/* 重写构造方法的注意点1.先调用父类的构造方法([super init])2.再进行子类内部成员变量的初始化 */
// 重写-init方法- (id)init{    // 1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性    self = [super init]; // 当前对象 self            // 2.如果对象初始化成功,才有必要进行接下来的初始化    if (self != nil)    { // 初始化成功        _age = 10;    }        // 3.返回一个已经初始化完毕的对象    return self;}- (id)init{    if ( self = [super init] )    { // 初始化成功        _age = 10;    }        // 3.返回一个已经初始化完毕的对象    return self;}

/* 自定义构造方法的规范 1.一定是对象方法,一定以 - 开头 2.返回值一般是id类型 3.方法名一般以initWith开头*/
// 父类的属性交给父类方法去处理,子类方法处理子类自己的属性- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no{    // 将name、age传递到父类方法中进行初始化    if ( self = [super initWithName:name andAge:age])    {        _no = no;    }        return self;}
/* 分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法  使用注意: 1.分类只能增加方法,不能增加成员变量 2.分类方法实现中可以访问原来类中声明的成员变量 3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用 4.方法调用的优先级:分类(最后参与编译的分类优先) --> 原来类  --> 父类 */
// 类库:很多类的集合
//  类本身也是一个对象,是个Class类型的对象,简称类对象        /*     利用Class 创建  Person类对象          利用 Person类对象 创建 Person类型的对象          */
/* 1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用一次。  2.当第一次使用某个类时,就会调用当前类的+initialize方法  3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)   先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法) */
// 当程序启动的时候,就会加载一次项目中所有的类。类加载完毕后就会调用+load方法+ (void)load{    NSLog(@"Person---load");}// 当第一次使用这个类的时候,就会调用一次+initialize方法+ (void)initialize{    NSLog(@"Person-initialize");}
Person *p = [[Person alloc] init];    p.age = 20;    p.name = @"Jack";    // 默认情况下,利用NSLog和%@输出对象时,结果是:<类名:内存地址>        // 1.会调用对象p的-description方法    // 2.拿到-description方法的返回值(NSString *)显示到屏幕上    // 3.-description方法默认返回的是“类名+内存地址”    NSLog(@"%@", p);
- (NSString *)description{    // 下面代码会引发死循环    // NSLog(@"%@", self);}
Class c = [Person class];        // 1.会调用类的+description方法    // 2.拿到+description方法的返回值(NSString *)显示到屏幕上    NSLog(@"%@", c);
Person *p = [[Person alloc] init];        // 指针变量的地址    NSLog(@"%p", &p);    // 对象的地址    NSLog(@"%p", p);    // <类名:对象地址>    NSLog(@"%@", p);
// 输出行号    NSLog(@"%d", __LINE__);        // NSLog输出C语言字符串的时候,不能有中文    // NSLog(@"%s", __FILE__);        // 输出源文件的名称    printf("%s\n", __FILE__);    // 输出当前函数名    NSLog(@"%s\n", __func__);

 

构造方法