原创 self 和 super
https://www.jianshu.com/p/15fa5e84c897
原创 extension(類擴展)和 category(類別)
extension(類擴展) 簡單來說,extension在.m文件中添加,所以其權限爲private,所以只能拿到源碼的類添加extension。另外extension是編譯時決議,和interface和implement裏的
原创 內存管理(5) - 關於retainCount在不同場合輸出值不符合預期的分析
1、NSString、NSMutableString 和 NSArray、NSMutableArray void x(void) { NSString *str = [[NSString alloc]init]; //定義
原创 protocol(協議)和 delegate(委託)
protocol(協議)和 delegate(委託) 實現不同頁面的數據交互、可以用在界面跳轉、界面傳值、跳轉頁面刷新數據、監聽事件等。當delegate的事件觸發時,delegate纔會被調用。 具體可參考: https://
原创 property(1) - 屬性的基本知識
1、property的基本 @interface Test : NSObject { NSArray *_array; //定義一個實例變量 } @property (nonatomic, assign) NSIn
原创 strong和copy
以下對使用strong 和 copy的地方都適用 .h @interface Test : NSArray @property (nonatomic,strong) NSArray * sArray; @
原创 內存管理(1) - 引用計算的基本操作
內存管理 內存管理其實就是對引用計數的管理,需要從MRC和ARC兩方面探討,其中MRC與ARC的主要區別是MRC下需要手動retain、release、autorelease等在ARC下會自動完成。 1、引用計數相關操作
原创 內存管理(4) - 循環引用
當用指針指向某個對象時候,可以對其進行管理(通過retain和release)就擁有對這個對象的強引用或弱引用 1、什麼是循環引用? 結論: 當兩個對象相互持有對方(即擁有對對方的強引用),此時各自的引用計數都爲1,釋放不了
原创 block(2) - 變量與block
block和variable 1、本地變量與block的關係及其變化 int main(int argc, const char * argv[]) { @autoreleasepool {
原创 關於const 、NSxxxx(不可變)、NSMutablexxxx(可變) 的區別
NSxxxx 、NSMutablexxxx 、const之間的關係都差不多、這裏用NSString 、NSMutableString來講 NSString的不可變 NSString *string = @"one";
原创 id相關
動態數據類型和靜態數據類型 動態數據類型只有在運行時候才知道其類型和屬性 靜態數據類型在編譯的時候就知道其類型和其屬性,並在編譯時可訪問其屬性 1、消息發送機制 id (動態數據類型) id是指針,id*是指針的指針 id
原创 block(5) - block需要特別注意的地方
1、ARC下也是有棧block的 1、ARC下,棧block 2、ARC下,堆block 3、MRC下,棧block 疑問 1:對比2,3,同樣的代碼在ARC,MRC下的block的類型居然不同,爲什麼呢? - 在A
原创 block(3) - 變量與__block修飾符
__block修飾變量的時候時候 1、__block修飾本地變量轉爲cpp的樣子 //用__block修飾的本地變量b多了這個結構體 struct __Block_byref_b_0 { //直譯爲本地變
原创 block(4) - 本地對象和block及__block修飾符
本地對象和block及__block修飾符 1、看其底層實現 //__block聲明而多出來的結構體 struct __Block_byref_b_0 { void *__isa; __Bloc
原创 block(1) - block的底層
一、什麼是代碼塊? 代碼塊的底層實現是結構體 1、block的內存實現 struct Block_layout { void *isa; //指向所屬類的指針,即