gender: (NSString *)gender
ID: (int)ID{
// 本类中变量初始化
if ([superinit]) {//也可以self = [self init],以便被本类中其他方法(init方法)调用。此处self执行的是该方法的对象
//直接赋值的方式,并没有考虑该实例变量的语义设置,所以也就没有相关的内存操作。
//我们可以调用实例变量的setter方法,来给实例变量赋值,这样就可以使用setter方法中的内存操作来保证实例变量的内存安全性。
// _name = name;
self.name = name;
// _gender = gender;
self.gender = gender;
// _ID = ID;
self.ID = ID;
}
return self;
}
=========================================================================================
2.便利构造器:是类方法,封装了alloc和init方法,使用起来更方便
.h文件
+ (instancetype)studentWithName:(NSString *)name
gender:(NSString *)gender ID:(int)ID
.m文件
+ (instancetype)studentWithName:(NSString *)name gender:(NSString *)gender ID:(int)ID{
return [[Studentalloc] initWithName:namegender:genderID:ID];// 这里已经不是以前的self了
}
main.m文件
// 调用便利构造器
Student *stu = [StudentstudentWithName:@"康大亮"gender:@"m"ID:100650114];//使用便利构造器创建学生对象
NSLog(@"姓名:%@,性别:%@,学号:%d", [stuname], [stu gender], [stuID]);
stu.name =@"诸葛孔明";
NSLog(@"姓名:%@", stu.name);
=========================================================================================
3.重写父类的description方法
description方法:当使用%@打印一个对象的时候,会调用这个方法
在.m文件中,重写description方法:
#pragma mark --重写系统提供的初始化方法
// 重写系统提供的初始化方法来定制自己需要的实例变量的值!
- (instancetype)init{
_name = @"张三"; // _name的可见度是默认的、受保护的可见度(protected),在类的内部可以直接访问。
return self;
}
在main.m的main函数中测试:
#pragma mark -访问实例变量
// 创建一个person对象
Person *person1 = [[Person alloc] init];
// person1->_name = @"刘蜀葵"; // 因为_name是protected可见度,所以在这里不能直接访问
// person1->_gender = @"男"; // 因为_gender是@private修饰的可见度,所以在这里不能直接访问
person1->_age = 23; // 因为_age是@public修饰的可见度,所以可以在这里访问到
NSLog(@"%@", [person1 name]);
2013-07-19 13:56:36.834 OC02实例变量可见度和方法-1[1305:85014]张三