OC基礎(chǔ)知識:
OC繼承了C語言的所有特點(diǎn)运杭。
- @ 表示C語言沒有 OC所增加的
- 每次拿內(nèi)存之后,要查看是否申請到內(nèi)存函卒,內(nèi)存用完之后一定要手動去釋放辆憔,避免出現(xiàn)野指針。
if (strcmp(str3, "Good") == 0){
// printf("相同\n");
//
// }else{
// printf("不同\n");
// }
// //將str3賦值為NULL避免產(chǎn)生野指針报嵌,同時也避免重復(fù)釋放
// if (str3 != NULL) {
// free(str3);
// str3 = NULL;
// }
- NSLog 代表日歷性虱咧。 OC語言命名前面加倆個字母的前綴,防止重復(fù)命名.Swift可在不同文件同命名锚国。
//Objective-C的字符串
// NSString *str4 = @"hello, world!";
//
// NSLog(@"%@",str4);
//
// NSLog(@"Hello, World!");
- OC中#if 0 和 #endif 表示中間的代碼為注釋掉腕巡,不參加編譯.和Swift中的 ** */ 意思大致相同
#if 0
#endif
- C語言中Int為32位 但是現(xiàn)在手機(jī)都是64位,所以加NSInteger
- 加下劃線表示為私有的血筑,不能亂動绘沉。例如:
@interface YFStudent : NSObject{
NSString *_name;
NSInteger _age;
}
- 在OC中創(chuàng)建方法和Swift不一樣,Swift中添加類是Static 或者 class ,但是OC中:類的定義是 -(void) eat; OC的圓括號里面為類型豺总。OC中的布爾值為大寫的BOOL,例如: -(BOOL) study:(NSString *) courseName
OC方法的名字有獨(dú)特之處;比如
方法名字: study: forHours:
- (BOOL) study:(NSString *) courseName forHours: (NSUInteger) hour;
- OC和Swift一樣车伞,創(chuàng)建對象也需要初始化方法,在OC中初始化方法為輸入init园欣,OC會自動添加 - (instancetype)init帖世,這樣的話就可以在Init后面繼續(xù)添加:比如:
申明部分:
- (instancetype)initWithName:(NSString *) name age:(NSInteger) age;
實(shí)現(xiàn)部分:
在OC實(shí)現(xiàn)部分不用去賦值粘貼,在類的實(shí)現(xiàn)方法部分輸入Init 自動會添加需要實(shí)現(xiàn)的部分代碼:
//類的實(shí)現(xiàn)部分
@implementation YFStudent
-(instancetype)initWithName: (NSString *)name
age:(NSInteger)age{
if (self = [super init]) {
_name = name;
_age = age;
}
return self;
}
OC中給對象發(fā)消息和Swift中有所不同,OC中為[a foo] ,為給對象發(fā)消息,Swift中為[0.foo].
typedef long NSInteger;有自適應(yīng)性日矫,在32位和64位中都可以進(jìn)行切換.
NSUInteger代表無負(fù)數(shù)
OC和C語言一樣先寫類型在寫變量,OC的方括號是寫右邊自動補(bǔ)左邊赂弓,Swift是寫左邊自動補(bǔ)右邊.OC中 alloc代表著請示內(nèi)存.
int main(int argc, const char * argv[]) {
@autoreleasepool {
YFStudent *stu = [[YFStudent alloc] initWithName:@"王大錘" age:25];
這代表請求 給學(xué)生內(nèi)存.
setName是修改學(xué)生的名字.
減號和屬性相關(guān)。+號和屬性無關(guān)
代表手動擴(kuò)展(屬性合成)
- @synthesize <#property#>
- //如果不希望自動合成屬性
@dynamic <#property#>
- 導(dǎo)入自己的為雙引號 "",導(dǎo)入系統(tǒng)的為尖括號<>
類方法
- 1哪轿、對象方法(1) 減號 - 開頭(2)只能由對象來調(diào)用(3)對象方法中能訪問當(dāng)前對象的成員變量(實(shí)例變量)
2盈魁、類方法(1) 加號 + 開頭(2) 只能由類(名)來調(diào)用(3) 類方法中不能訪問成員變量(實(shí)例變量)
3、類方法的好處和使用場合(1) 不依賴于對象窃诉,執(zhí)行效率高(2) 能用類方法杨耙,盡量用類方法(3) 場合:當(dāng)方法內(nèi)部不需要使用到成員變量時,就可以改為類方法
self
self 是一個指針飘痛,用在方法中時珊膜,哪個對象調(diào)用該方法 self 指針就指向哪個對象,可以把它當(dāng)作調(diào)用該方法的那個對象的指針一樣使用宣脉。
#import <Foundation/Foundation.h>/*
self 的用途:
(1) 誰調(diào)用了當(dāng)前方法车柠,self 就代表誰* self 出現(xiàn)在對象方法中,self 就代表對象* self 出現(xiàn)在類方法中塑猖,self 就代表類
(2) 在對象方法利用"self->成員變量名"訪問當(dāng)前對象內(nèi)部的成員變量
(3) [self 方法名]可以調(diào)用其他對象方法\類方法
繼承
#import <Foundation/Foundation.h>
1竹祷、繼承的好處:
(1) 抽取重復(fù)代碼
(2) 建立了類之間的關(guān)系
(3) 子類可以擁有父類中的所有成員變量和方法
2、注意點(diǎn)(1) 基本上所有類的根類是 NSObject
多態(tài)
多態(tài)就是用父類類型的指針創(chuàng)建子類的對象羊苟,比如 Dog 類繼承了 Animal 類塑陵,下面都是多態(tài):
Animal *aa = [Dog new];
Dog *dd = (Dog *)aa;
1.沒有繼承就沒有多態(tài)
2.代碼的體現(xiàn):父類類型的指針指向子類對象
3.好處:如果函數(shù)\方法參數(shù)中使用的是父類類型,可以傳入父類蜡励、子類對象
4.局限性:父類類型的變量不能直接調(diào)用子類特有的方法令花。必須強(qiáng)轉(zhuǎn)為子類類型變量后,才能直接調(diào)用子類特有的方法