【Objective-C学习笔记】核心语法——构造方法

来源:互联网 发布:java生成二维码图片 编辑:程序博客网 时间:2024/05/16 10:06
一、构造方法
1、专门用来初始化对象的方法,是对象方法,以 - 开头。
2、构造方法的作用:对象创建成功之后,实例变量会有一定的值。
二、创建对象
1、Person *p = [Person new];
2、完整的创建方法
(1)调用+alloc方法返回一个分配好存储空间的对象(Person类型的新对象)。
Person *p1 = [Person alloc];
(2)对象调用-init方法进行初始化。
Person *p2 = [p1 init]; 
(3)根据以上可以写为:
Person p = [[Person alloc] init];
三、重写构造方法
1、固定写法
@interface Person : NSObject@property int age;@end@implementation Person// 固定写法- (id)init{    if (self = [super init])    {        _age = 10;    //初始化年龄为10岁    }    return self;}@end
(1)[super init]:初始化Person对象,需要先把父类中的实例变量进行初始化,父类为NSObject,把isa初始化为当前类,也就是Person类。
(2)_age = 10;:把继承自父类的实例变量初始化成功后,再对Person对象中的实例变量进行初始化。
(3)return self:返回一个已经初始化完毕的对象。
2、使用注意
(1)先初始化父类中的实例变量,再初始化子类中的实例变量
(2)如果父类中的实例变量初始化失败,那么也不用对子类中的实例变量进行初始化
四、自定义构造方法
1、不带参数:创建一个叫名字是jack的对象
#import <Foundation/Foundation.h>@interface Person : NSObject@property NSString *name;@end@implementation Person- (id)init{    if (self = [super init])    {        _name = @"jack";    }        return self;}@endint main(){    Person *p = [[Person alloc] init];    NSLog(@"名字是%@", p.name);    // 名字是jack    return 0;}
2、带参数:创建一个名字是jack,年龄25的对象
#import <Foundation/Foundation.h>@interface Person : NSObject@property NSString *name;@property int age;- (id)initWithName:(NSString *)name andAge:(int)age;@end@implementation Person-(id)initWithName:(NSString *)name andAge:(int)age{    //对父类中的实例变量进行初始化    if (self = [super init])    {    //初始化子类实例变量        _name = name;        _age = age;    }    return self;}@endint main(){    Person *p = [[Person alloc] initWithName:@"jack" andAge:25];        NSLog(@"name=%@, age=%d", p.name, p.age);    //name=jack, age=25    return 0;}
学生继承自人类,创建一个名字叫jim,年龄18,学号1的对象
@interface Student : Person@property int no;- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no;@end@implementation Student- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no{    // 将name、age传递到父类方法中进行初始化    if ( self = [super initWithName:name andAge:age] )    {        _no = no;    }    return self;}@endint main(){    Student *stu = [[Student alloc] initWithName:@"jim" andAge:18 andNo:1];        NSLog(@"name=%@, age=%d, no=%d", stu.name, stu.age, stu.no);    //name=jim, age=18, no=1        return 0;}
3、使用技巧
父类的属性交给父类方法去处理,子类的方法处理子类的属性
4、 自定义构造方法的规范
(1)一定是对象方法,一定以 - 开头
(2)返回值一般是id类型
(3)方法名一般以initWith开头



0 0
原创粉丝点击