首页 > 代码库 > 构造方法
构造方法
// 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__);
构造方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。