您的位置:首页 > 移动开发 > Objective-C

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

2015-04-04 22:03 429 查看
一、构造方法
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;
}
@end

int 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;
}
@end

int 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;
}
@end

int 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开头
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: