基本語法: php
static定義在全局變量上時會改變其做用域,對應所在的局部範圍。extern相似php中的global。 數組
結構體struct定義了一個多維kv數組,枚舉類型enum檢測數據範圍,二者經過typedef可封裝出自定義類型 。 安全
*表示指針取值,&爲取址操做(php中爲引用傳值,含義不一樣)。從實例化一個對象 NSString *foo=[NSString stringWithString:"example"] 可知,對象也是指針;指針取址後可經過運算操做地址。 函數
帶*的變量都寄存在heap,相反則在stack。 性能
對象: atom
類中的方法又稱消息,一般意義上調用一個方法,在oc中又稱發送一個消息。 spa
對象方法init用於初始化函數(相對於php的構造函數construct)。類方法即靜態方法 線程
私有方法放在實現文件中,調用方法以前 指針
@sythesize會在編譯時生成所需的setter、getter方法 對象
property中的特性包括setter/getter、readwrite/readonly、assign/retain/copy、nonatomic
非線性安全noatomic不使用線程鎖,性能略有提升;retain爲指針拷貝,copy爲內容拷貝,做用於NS對象
內存管理:
調用帶有alloc、copy、create,使用相似[Foo alloc] init..]和CreateFoo()會使保留計數加1
經過autorelease在退出循環後會自動釋放內存,但不是馬上釋放;須要馬上釋放使用[Foo release]形式,或建立自動釋放池NSAutoreleasePool,再循環體尾部釋放(drain或release),嵌套的釋放池在最內部優先釋放
init相似php的構造方法__construct,則dealloc則相似析構方法__destruct
oc中容許nil對象調用方法,結果爲不執行,所以在釋放成員變量後將指針設爲nil,不然指向的內存地址會不存在(dangling pointer)
委託模式中對象互相內嵌會致使內存泄露,這時應該將委託變量設爲assign類型的弱引用
屬性的引用類型,強引用代表保留在內存中的指針,不被回收,弱引用反之
當nib文件中的對象沒有被外部引用時,可能會被垃圾回收,所以建立一個強引用的IBOutlet鏈接到owner對象上