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]張三