一:構造說法說明:
(1)init方法就是構造方法,是用來初始化對象的方法,注意這是一個對象方法,一減號開頭。
默認初始化完畢後,所有成員變量的值都爲0。
(2)子類擁有的成員變量包括自己的成員變量以及從父類繼承而來的成員變量,在重寫構造方法的時候應該首先對從父類繼承而
來的成員變量先進行初始化。
(3)原則:先初始化父類的,再初始化子類的。
二:代碼示例
main函數代碼示例:(詳細解釋都寫在代碼裏了,請認真查看)
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//一開始我們都是調用父類init這個構造方法來初始化內存
//Student *stu = [[Student alloc]init];
Student *stu2 = [[Student alloc]initWithAge:24 andNo:25];
NSLog(@"age = %i ,no = %i",stu2.age,stu2.no);
//我們直接打印stu2
NSLog(@"%@",stu2);//重寫description方法之前,結果爲<Student: 0x100204890>
// 重點!!!!!!打印出來會是內存地址,因爲stu實際上存的就是地址,跟指針一樣,OC中爲了方便理解把stu當成一個對象
//編譯器在打印OC對象的時候其實是調用了description方法,我們重寫一下這個方法
//重寫description方法之後的結果爲:age = 24 ,no = 25
}
return 0;
}
//構造方法最好以init開頭
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
int _age;
int _no;
}
- (void)setAge:(int)age;
-(int)age;
-(void)setNo:(int)no;
-(int)no;
//自定義一個構造方法,構造方法最好以init開頭
-(id)initWithAge:(int)age andNo:(int)no;
@end
重點:.m文件的實現和description方法示例:(其中還用到了self的知識)
注意:什麼時候會調用description 方法呢?其實就是在打印對象的時候調用的,如果你用的是系統類比如說NSString 類,那麼你就不用再重新寫了因爲系統已經幫你寫好了,我們一般都是自己創建對象,並打印的時候才用description。
#import "Student.h"
@implementation Student
-(void)setAge:(int)age
{
_age = age;
}
-(int)age
{
return _age;
}
-(void)setNo:(int)no
{
_no = no;
}
-(int)no
{
return _no;
}
//實現自定義構造方法
- (id)initWithAge:(int)age andNo:(int)no
{
//繼承父類,先調用父類的構造方法
self = [super init];
//調用完父類的init之後我們要把它賦值給當前對象,也就是self,self就指向了當前對象,我們當前對象就被父類創建好了
//有時候父類的構造方法返回值爲nil,所以我們就需要先判斷一下
if (self != nil) {
_age = age; //相當於 self.age = age;
_no = no; //相當於 self.no = no;
}
//注意!!!!!!!!!!上面是一般方法下面是精華方法
/*
if(self = [super init]){ (是一個= 不是兩個,要注意)
self.age = age;
self.no = no;
}
*/
return self;
}
//重寫父類的description方法
-(NSString *)description
{
//stringWithFormat 拼接字符串,NSStrig 類的一個方法,後面會說到
Student *stu = [NSString stringWithFormat:@"age = %i ,no = %i",_age,_no];//相當於self.age,self.no
return stu;
}
@end