1-7條?
//Objective-C消息型語言嘀韧,運(yùn)行時(shí)所應(yīng)該執(zhí)行的代碼室友運(yùn)行期環(huán)境來決定的悉尾,使用函數(shù)調(diào)用的語言則是由編譯器決定 對象所占內(nèi)存總是分配在“堆”,不會(huì)分配在“棧”。不能在“椫蒙”中分配OC對象 指向同一地址不拷貝對象,兩個(gè)變量就會(huì)同時(shí)指向此對象(內(nèi)存的值也一樣 指向此對象內(nèi)存地址) Objective-C在運(yùn)行時(shí)才會(huì)檢查對象類型符糊,接受到消息后凫海,由運(yùn)行期環(huán)境決定執(zhí)行哪種代碼
//堆中的內(nèi)存需要直接管理(MRC,ARC)棧上的內(nèi)存在棧幀彈出時(shí)候自動(dòng)清理男娄,在Objective-C中行贪,有的時(shí)候可能碰到不是Objective-C對象 比如CGRect frame(CGRect是結(jié)構(gòu)體)一般保存的都是非對象類型
//在編譯一個(gè)使用某個(gè)類的文時(shí),不需要知道類的全部細(xì)節(jié)只需要由個(gè)類名就行模闲,就用@class 還可防止循環(huán)引用 代理最好分出文件
//字面量語法方便操作瓮顽,語法簡單 @{} @[] @“” @123; 對象必須是foundation框架才可以,自定義這些類的子類不可這樣用(一般也不會(huì)這樣做)字面量的對象都是不可變的围橡,如果想要可變版本需要copy一份
//static const 要比 #define 更好 用這種方式定義的常亮帶有類型信息 發(fā)送通知的時(shí)候定義
extern NSString * const YCNotification;
NSString *const YCNotification = @"wuqing";
常量名字最好以類名為前綴 YCNotification 此值會(huì)放在全局符號(hào)表 可以再定義該常亮的編譯器之外使用 其他常亮也是如此 如果要把某常量對外公布 都可以這么搞
//用枚舉表示狀態(tài),選項(xiàng)缕贡,狀態(tài)嗎翁授, OC中枚舉可以用位運(yùn)算
typedef enum : NSUInteger {
Name = 1,
Age,
Height,
} Preson;
typedef enum : NSUInteger {
eat = 0,
work = 1 << 0,
seeMovie = 1 << 1,
} PresonDoSomething;
//理解屬性@property
原子性: 同步鎖 讀寫權(quán)限:
讀寫:readwrite 擁有g(shù)etter和setter方法,只讀:僅擁有g(shù)etter方法 可以用這個(gè)特質(zhì)把某個(gè)屬性公開成只讀晾咪,然后在class-continuation中重新定義成讀寫屬性
內(nèi)存管理語義:assign 純量類型 int nsinterger cgfloat等
Strong 擁有關(guān)系 強(qiáng)指針
Weak 非擁有關(guān)系 弱指針(不保留新值收擦,也不釋放舊值 所指對象唄摧毀屬性被清空)
Copy 與strong類似 但是這種設(shè)置方法不保留新值,而是拷貝一份谍倦,保護(hù)原有的封裝性為了在對象不會(huì)在不知情的情況下遭到更改
Unsafe_unretained 和assign相同 但是適用于 對象類型 也表達(dá)一種非擁有關(guān)系 當(dāng)目標(biāo)對象被摧毀塞赂,屬性值不會(huì)自動(dòng)清空 與weak區(qū)別在這里
在對象內(nèi)部盡量訪問實(shí)例變量 懶加載等