OC中的构造方法(在对象初始化的时候,这时候可以直接调用构造函数)
1.一般以init开头,(动态方法)
2.返回值最好是返回ID,
步骤:1.调用super的构造方法:
2.判断self是否为空如果不为空,那么就进行赋值操作
3.返回self。
-(id)initWithAge:(int)ageandNo:(int)no{
self=[superinit];
if(self){
_age=age;
_no=no;
}
return self;
}
如果不打印成员变量而是打印一个对象,也就是用%@
来打印一个对象的是否,这时候会
自动调用父类的description(nsstring)方法:这时候就需要我们重写父类的description
方法,以输出
我们想要看到的结果。这时候要用到stringwithformat:然后返回字符串。
- (NSString *)description
{
NSString *str=[NSString
stringWithFormat:@"age: %i no: %i",_age,_no];
return str;
}
Main :
Person *person = [[Personalloc]initWithAge:1
andNo:3];
NSLog(@"%i %i ",person.age,person.no);
NSLog(@"%@",person);
私有方法:如果一个方法直接写在了.m文件中,没有在.h中声明,那么该方法为私有的方法。
Property
和synthesize:
当一个类中的成员变量很多的是否,如果你要自己手写setter和getter方法,那么会很麻烦,并且很多代码都是重复的,为了解决这个问题,引入了property和sythesize。
@property:是在.h文件中定义的,例如:@property
int age :编译器会自动生成setter和getter方法,生成的格式为
set +成员变量民:
即setage;
同理,如果你在.m文件中用关键字sythesize,那么会自动实现用property声明的成员变量的方法》
Synthesize
会默认访问跟age同名的成员变量
如果找不到,会自动生成一个变量age
@synthesizeage=_age; //age = _age
代表getter
和getter会去访问_age这个成员变量。
在xcode4.5以后,如果你在@property
int
age
里面声明一个成员变量,而在.m文件里面没有声明@synthesize,那么编译器也会自动
默认的给你生成setter
和getter方法的实现。
前提:如果在.h里面没有声明age这个成员变量,
问题:如果没有在.m文件中进行@synthesize
那么编译器生成的是什么成员变量呢:
通过验证得出,是_age ,setter
和getter
方法里面访问到的都是变量_age;而不是age.
如果在.h文件里面声明的有age
这个成员变量,那么在.m文件中直接@synthesize
age ,那么这时候编译器就会自动生成一个私有的_age成员变量
如果2:如果你在setter方法里面有自己的特殊操作例如,你想age=age*12,返回一个月,这时候你就要自己手动写一个setter方法,如果你只写一个setter方法的话那么关键字@synthesize
不会再生成setter方法,而只生成一个getter方法,同理,如果你只实现一个getter方法,那么编译器会自动给你生成一个setter方法:
版权声明:本文为博主原创文章,未经博主允许不得转载。