1.ObjC跟C的區(qū)別與聯(lián)系
首先 ObjC是一個面向?qū)ο蟮恼Z言(封裝涧黄、繼承漓帚、多態(tài)) ObjC相當于C的一個超集 即ObjC允許使用任何C語言代碼 但增加了許多C沒有的特點 bigger easier
2.ObjC中的類與對象
類由接口( XX.h @interface)和實現(xiàn)(XX.m @implementation)兩部分構(gòu)成
XX.h中聲明類中的實例變量和功能
XX.m中實現(xiàn).h中的功能
注意:
命名規(guī)則 類名首字母大寫 Student 方法名首字母小寫(駝峰)-(void)sayHi
- 實例方法 + 類方法
3.對象的創(chuàng)建和使用
要創(chuàng)建一個類的對象母债,即要做3件事:對象的聲明、分配內(nèi)存空間、對象的初始化
聲明:@interface Student : NSObject
{
實例變量 int _age;
}
方法名:
-(void)setAge:(int)age毡们;
-(int)getAge迅皇;
-(void)sayHi;
實現(xiàn):#import "Student.h"
@implementation Farmer
-(void)setAge:(int)age
{
int _age=age;
}
-(int)getAge
{
return _age;
}
-(void)sayHi
{ }
調(diào)用:#import "Student.h"
Student *s=[[Student alloc]init];
s.name=@"tt";
[s sayHi];
屬性:@property(non atomic衙熔,retain)NSString *name登颓; //setter getter方法
@synthesize name = _name;
注意:
@property()里邊的屬性
訪問控制: readwrite readonly
內(nèi)存管理:assign 基本 retain 對象 copy 實現(xiàn)NScopying
線程安全:atomic nonatomic 非原子性
對象初始化三個方法
指定初始化賦值:
聲明:
-(id)initWithName:(NSString *)name;
-(id)initWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate;
實現(xiàn):
-(id)initWithName:(NSString *)name
{
self=[super init];
if (self)
{
_name=name;
}
return self;
}
-(id)initWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate
{
self=[self initWithName:name];
if (self)
{
_name=name;
_age=age;
_sex=sex;
_talent=talent;
_mate=mate;
}
return self;
}
調(diào)用:
Rider *r=[[Rider alloc]initWithName:@"rider" andAge:25 andSex:@"M" andTalent:@"HP 30,MP 0,SP 30" andMate:nil];
注意:
通常以init開頭 返回值為id
一個類只有一個指定初始化方法
指定的初始化方法是必須執(zhí)行的
內(nèi)部實現(xiàn)會調(diào)用到父類的初始化方法
便利構(gòu)造器:
聲明:
-(id)initWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate;
+(id)machineWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate;
實現(xiàn):
-(id)initWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate
{
self=[super init];
if (self)
{
_name=name;
_age=age;
_sex=sex;
_talent=talent;
_mate=mate;
}
return self;
}
+(id)machineWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate
{
Machine *mac=[[Machine alloc]initWithName:name andAge:age andSex:sex andTalent:talent andMate:mate];
return [mac autorelease];//便利構(gòu)造器內(nèi)部已經(jīng)實現(xiàn)內(nèi)存管理
}
調(diào)用:
Machine *mac=[Machine machineWithName:@"machine" andAge:5 andSex:@"?" andTalent:@"HP 10,MP 0,PW 100" andMate:nil];
注意:
便利構(gòu)造器方法以類名開頭
類方法內(nèi)部不能用實例變量
類方法只能以類(名)來調(diào)用
單例模式:
聲明:
+(King *)defaultKing;
實現(xiàn):
+(King *)defaultKing
{
static King *k=nil;
if (k==nil)
{
k=[[King alloc]init];
}
return k;
}
調(diào)用:
King *k=[King defaultKing];
k.name=@"king";
k.age=100;
k.sex=@"M";
k.talent=@"PH 10,MP 10";
k.mate=nil;
注意:
單例對象的類只能有一個實例