一、构造方法
构造方法默认是:init
-(instancetype)init
{
if(self = [super init])
{
//初始化成员变量
}
return self;
}
自定义构造方法:
.h文件中
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int a;
//声明构造方法
-(instancetype)initWithA:(int)a;
@end
.m文件中
#import "Person.h"
@implementation Person
//实现构造方法
-(instancetype)initWithA:(int)a
{
if (self = [super init]) {
_a = a;
}
return self;
}
@end
调用:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//调用构造方法
Person * p = [[Person alloc]initWithA:10];
NSLog(@"%@",p);
}
return 0;
}
注意:
自定义的初始化方法,方法名称initWithXXX开头后面的随意,千万不能写成initwithXXX,否则编译器报错
报错的结果:
cannot assign to 'self' outside of a method in the init family
二、description方法
description方法的使用:
description方法默认实现的时返回类名和对象的内存地址。
重写description方法,来实现自己想要的输出
.h文件中
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int a;
//声明构造方法
-(instancetype)initWithA:(int)a;
//声明description方法
-(NSString*)description;
@end
.m文件中
#import "Person.h"
@implementation Person
//实现构造方法,initWithXXX
-(instancetype)initWithA:(int)a
{
if (self = [super init]) {
_a = a;
}
return self;
}
//实现description 方法
-(NSString*)description
{
return [NSString stringWithFormat:@"a = %d",_a ];
}
@end
调用:
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//调用构造方法
Person * p = [[Person alloc]initWithA:10];
//自动调用description方法
NSLog(@"%@",p);
}
return 0;
}
输出结果:
2015-05-30 01:10:44.163 自定义构造方法[970:96905] a = 10