一、Objective-C基本概念
面向對象編程:OOP (Object Oriented Programing)
類似的語言:C++,Java,C#
1、類和對象
類:具有相同特征和行為的事物的抽象。
對象是類的實例,類是對象的類型。
類是模板,對象是具體表現,任何對象都要占用內存空間。
2、面向對象和面向過程的區別
面向對象以對象為中心;
面向過程以事件為中心。
3、編程過程:定義類,創建對象,使用對象
面向對象編程中,先創建出對應的類,再由類生成對象,進而完成我們的開發。
4、OC中的數據類型:
基本數據類型:int、float、double、結構體、BOOL,聲明時不加*
NSInteger age = 18;
int number = 1;
float score = 98;
對象類型:使用類創建的數據類型,聲明時加*
如:
C語言中使用字符串? “hello”
OC語言中使用字符串對象? @“hello”
NSString 是系統提供的字符串類,用NSString定義對象類型的變量時,必須加上*
NSString * name = @"hello";
二、類的定義
1、類的定義包含兩部分:接口部分,實現部分
接口部分在.h文件中,實現部分在.m文件中。
2、接口部分
關鍵字標志:@interface...@end
作用:聲明類的特征和行為
@interface后接 類名 : 父類名
A、聲明類的特征,即聲明實例變量,在@interface后的{ }中。變量中存儲的是對象的數據(類似于結構體的成員變量)。
實例變量名必須以下劃線開頭,首字母小寫,使用駝峰命名法。
B、聲明類的行為:即聲明方法
OC中的方法,類似于C語言的函數,是用于實現某個功能的代碼段。
方法聲明語法:
-/+ (返回值類型) 方法名;
方法名的聲明在聲明文件.h中。方法實現在實現文件.m中。
3、實現部分
關鍵字標志:@implementation…@end
作用:編寫方法的具體實現
@implementation后接創建的類名(和@interface后接的類名一致,不是父類名)。
4、對象和方法的使用
在控制臺輸出
C語言中使用printf輸出。
OC中使用NSLog輸出,在輸出內容前加@“ ”。
NSLog(@"age = %ld", age);
NSLog(@"number = %d", number);
NSLog(@"score = %.1f", score);
輸出對象類型的數據使用%@。
NSLog(@"name = %@", name);
三、創建對象
創建Person類,繼承于父類NSObject
Person.h文件
@interface Person : NSObject
{
@public
NSString * _name;?? // 姓名
NSString * _gender; // 性別
int _age;?????????? // 年齡
}
- (void) sayHi;
@end
Person.m文件
@implementation Person
- (void) sayHi
{
NSLog(@"How are you ");
}
@end
語法:類名? * 指針變量 = [ [類名 alloc] init];
main.m 文件中
1、分配內存空間
a、使用alloc方法在堆區分配Person類的內存空間,存儲創建的對象。
b、分配的內存空間的數據會被自動清空,即所有的實例變量的初始值為0。
c、返回分配的內存空間的地址。指針接收地址。
[Person alloc]在堆區創建對象,定義指針p1存儲對象在堆區的內存空間地址。
Person * p1 = [Person alloc];
注:
OC中使用[ ]調用方法,方法和調用的對象層級對應。
如:[類類方法] [對象實例方法]
2、初始化對象
使用實例init方法對創建的對象進行初始化。
現在init方法是一個空實現。
p1 = [p1 init];
創建對象一般采用的方式是:
Person * p1 = [ [Person alloc] init ];
在對象創建完成后,可以對實例變量進行賦值操作。
如:Person * p2 = p1;
四、使用對象
1、調用方法實現功能 [? ]
使用建立好的對象p1
Person * p1 = [ [Person alloc] init ];
[p1?sayHi];
運行即可得:How are you
2、操作實例變量 為實例變量賦值
p1->name = @”zhangsan”;
p1->gender = @’’male”;
p1->age = 18;
也可以對賦值的實例變量進行修改
p1->age = 20;
3、讀取值
NSLog(@"%@ %@ %d", p1->_name,p1->_gender, p1->_age);
運行程序得到為變量賦的值。
五、實例變量有三種可見度
@public 實例變量可以在類的內部和外部操作
@protected?實例變量只能在該類和其子類內操作
@private?實例變量只能在該類的內部操作
@public 類型的實例變量的操作方法
1、類的外部?? 對象->實例變量
2、類的內部?? 在實例方法的實現部分,直接使用實例變量
聲明Person類的introduce方法,在實現部分使用public實例變量
所有使用Person類創建的對象,都可以調用introduce方法
在實例方法中可以直接使用實例變量(在類的內部調用實例變量),哪個對象調用了實例方法,那么實例變量中的值屬于當前調用這個方法的對象
- (void)introduce
{
NSLog(@"name: %@ gender: %@ age: %d", _name, _gender, _age);
}
六、初始化方法 init
初始化init方法,即重寫init方法,為聲明的類的實例變量賦初值,同時,所有創建的類的對象都默認擁有init方法為變量賦的初值。
init(初始化方法)用來初始化(賦值)聲明的實例對象的初始值。
- (instancetype)init? //- (id)init 類型功能類似
{
//???在實例方法中,self表示調用這個方法的對象
//???self表示Person類
//???所有的學生對象在初始化之后,_age都是18
//???在初始化方法中設置的實例變量,后續是可以修改值
_age = 18;
return self;
}
七、其他
1、創建的Person類型的對象的內存地址賦值給指針p1。
指針p1指向了一個Person對象。
當一個指針指向某個對象時,可以用指針代指對象。如:Person對象p1.
2、Person * p3 = nil;//類似于NULL。對象類型的指針使用nil。
p3被稱為空指針。
在OC中對空指針nil做任何操作都無效(相當于什么都沒有做),對NULL做操作程序會崩潰。
3、使用@可以打印多種對象
使用%@打印對象
a、顯示<類名:地址>,一般是在打印自定義類型的對象或部分系統提供的類型的對象時輸出
NSLog(@"%@", p1);
得p1的地址。
b、顯示字符串對象的內容
NSString * str = @"hello";
NSLog(@"%@", str);
c、顯示(null)? 打印了空指針
NSString * string = nil;
NSLog(@"%@", string);
下圖為今年部分iOS開發的視頻教程,因為不定時更新中故不做多的截圖,如果有iOS開發上的問題不懂或者需要視頻教程可以看我的個人簡介。
不定時更新中。