原创 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; //指向所屬類的指針,即