@autoreleasepool
作用:優(yōu)化內(nèi)存的使用和釋放
1, 寫基于命令行的的程序時(shí)低散,就是沒有UI框架,如AppKit等Cocoa框架時(shí)苔严。
2, 寫循環(huán)每瞒,循環(huán)里面包含了大量臨時(shí)創(chuàng)建的對(duì)象。(本文的例子)
3, 創(chuàng)建了新的線程暇唾。(非Cocoa程序創(chuàng)建線程時(shí)才需要)
4, 長時(shí)間在后臺(tái)運(yùn)行的任務(wù)。
__weak, __strong :用來修飾變量
__strong 是缺省的關(guān)鍵詞。
__weak 聲明了一個(gè)可以自動(dòng) nil 化的弱引用策州。
__unsafe_unretained?聲明一個(gè)弱應(yīng)用瘸味,但是不會(huì)自動(dòng)nil化,也就是說够挂,如果所指向的內(nèi)存區(qū)域被釋放了旁仿,這個(gè)指針就是一個(gè)野指針了。
__autoreleasing 用來修飾一個(gè)函數(shù)的參數(shù)孽糖,這個(gè)參數(shù)會(huì)在函數(shù)返回的時(shí)候被自動(dòng)釋放枯冈。
對(duì)象 消息
在Java、C++世界办悟,我們調(diào)用一個(gè)對(duì)象的某方法尘奏,在Objective-C里,這稱作給類型發(fā)送一個(gè)消息病蛉。
在Java里炫加,對(duì)象和方法關(guān)系非常嚴(yán)格,一個(gè)方法必須屬于一個(gè)類/對(duì)象铺然,否則編譯是要報(bào)錯(cuò)的俗孝。而在Objective-C里,類型和消息的關(guān)系比較松散魄健,消息處理到運(yùn)行時(shí)(runtime)才會(huì)動(dòng)態(tài)決定赋铝,給類型發(fā)送一個(gè)它無法處理的消息,也只會(huì)拋出一個(gè)異常沽瘦,而不會(huì)掛掉柬甥。
[obj undefinedMethod];
在代碼里調(diào)用沒定義的方法(這是Java世界的習(xí)慣說法啊,專業(yè)的叫法是其垄,給obj對(duì)象傳遞它無法處理的消息)苛蒲,Xcode會(huì)警告,但編譯能成功绿满,運(yùn)行的時(shí)候會(huì)出錯(cuò)臂外。
@interface
與Objective-C的interface概念最接近的是C和C++里的頭文件,它與implementation是成雙成對(duì)出現(xiàn)的喇颁,作用是聲明類的成員變量和方法漏健。它與Java的interface概念完全不同:
Objective-C里,interface有且只有一個(gè)實(shí)現(xiàn)橘霎,Java的interface可以有0-N個(gè)實(shí)現(xiàn)
Objective-C里蔫浆,interface可以定義成員屬性,Java里不可以
Objective-C里姐叁,和Java的Interface概念相似的是Protocol
私有方法和公開方法
寫在.h頭文件里的方法都是公開的瓦盛,Objective-C里沒有私有方法的概念洗显,要實(shí)現(xiàn)私有方法的效果只能借助Category
類方法:類似靜態(tài)函數(shù),加號(hào)前綴
@interface MyClass
+(void) sayHello;
@end
使用:[MyClass sayHello];
實(shí)例方法:非靜態(tài)函數(shù)原环,減號(hào)前綴
@interface MyClass : NSObject
-(void) sayHello;
@end
mycls = [MyClass new];
[mycls sayHello];