第一章
1.運(yùn)行時(shí)語(yǔ)言:在編譯的時(shí)候不能直接編譯成機(jī)器可讀的語(yǔ)言,而是在運(yùn)行時(shí)(runtime)把程序編譯成機(jī)器可讀的語(yǔ)言蜀涨。OC就是一門動(dòng)態(tài)語(yǔ)言瞎嬉、c++為靜態(tài)語(yǔ)言
2.盡量減少頭文件的引用蝎毡,這樣可以提高編譯速度
3.盡量少使用#define
正確
static NSString *const Name = @"CF";
static const CGFloat Height = 1.80;
錯(cuò)誤
#define Name @"CF"
#define Height = 1.80
5.返回值不確定時(shí)使用instancetype 而不是用id
第五章
33.在一個(gè)類中也可以創(chuàng)建不同的類,這樣可以免去創(chuàng)建類似的類佑颇,而是用一個(gè)類顶掉,在類的里面再去常見其他的類即可。
***.h文件 ***
#import <Foundation/Foundation.h>
@interface Catagory : NSObject
@property (nonatomic,copy) NSString *ss;
-(void)eat;
@end
@interface CatagoryOne : NSObject
@property (nonatomic,copy) NSString *oneName;
-(void)eat;
@end
@interface CatagoryTwo : NSObject
@property (nonatomic,copy) NSString *twoName;
-(void)eat;
@end
.m文件
#import "Catagory.h"
@implementation Catagory
-(void)eat{
NSLog(@"Catagory eat");
}
@end
@implementation CatagoryOne
-(void)eat{
NSLog(@"CatagoryOne eat");
}
@end
@implementation CatagoryTwo
-(void)eat{
NSLog(@"CatagoryTwo eat");
}
@end
只需要引用一個(gè)#import "Catagory.h"里面的CatagoryOne 和 CatagoryTwo 就都可以使用了
注意這樣的優(yōu)點(diǎn)是把有同樣邏輯和功能的類放在一起挑胸,不需要再去單獨(dú)的拆分痒筒,如果兩個(gè)類的邏輯并不一樣,那么久不要放在一起茬贵。
34.在我們獲取一個(gè)對(duì)象的時(shí)候簿透,可以先進(jìn)行一些判斷,例如這個(gè)對(duì)象確認(rèn)是某個(gè)類解藻,或者是否是有值的老充,之后再去進(jìn)行一些操作,這樣可以提高代碼的健壯性螟左,不會(huì)以為拿到的類啡浊,類型不對(duì)崩潰,會(huì)因?yàn)橐詾橛兄到罕常瑢?shí)際是沒(méi)有值的崩潰問(wèn)題巷嚣。
36.一個(gè)對(duì)象調(diào)用new方法的時(shí)候,做了兩步操作钳吟,第一步:創(chuàng)建對(duì)象的內(nèi)存廷粒,第二步:調(diào)用對(duì)象的init方法
38.block代碼塊里面使用self會(huì)出現(xiàn)循環(huán)引用無(wú)法釋放的問(wèn)題, 應(yīng)該在block之前改成弱引用
_weak ClassName *weakself = self;
39.OC中所有對(duì)象之間的交互都是通過(guò)指針來(lái)改變的红且。
40.當(dāng)一個(gè)對(duì)象至nil時(shí)坝茎,如果沒(méi)有其他對(duì)象強(qiáng)引用就會(huì)被釋放。
第六章
41.在OC中每個(gè)對(duì)象都隱藏著一個(gè)數(shù)據(jù)結(jié)構(gòu)指針isa指針暇番。在OC中每個(gè)對(duì)象都保留一個(gè)超類指針嗤放,通過(guò)該指針可以調(diào)度自己已有的方法和調(diào)度基類。
注:沒(méi)有寫的建議壁酬,個(gè)人認(rèn)為是老的次酌,或者是大家都知道,所有沒(méi)有提及厨喂,只寫了個(gè)人認(rèn)為要注意的和措。
小伙伴們?nèi)绻J(rèn)為還有其他要注意的,請(qǐng)留言蜕煌,我會(huì)添加上去派阱。