1.內存問題
①dealloc:
[super dealloc]; //把從父類中繼承來的實例變量釋放了
//以下兩個方法,self.xxx = nil;更好。將變量設置爲nil,可以防止野指針。
self.xxx = nil;
[xxx release]; //ARC不需要自己操作
②自動釋放池
NSAutoRelease的一個實例。當向一個對象發送autoRelease消息時,該對象會自動入池;待對象銷燬時,將會向池中所有對象發送一條release消息,釋放對象。
2.設計模式:
①常見的設計模式:
單例設計、代理設計、觀察者(通知)、工廠方法、模板方法
②KVC和KVO
KVC:一種間接訪問對象實例變量的機制,不通過存取方法就可以訪問對象的實例變量
KVO:通知機制,被觀察的對象必須使用KVC鍵值編碼來修改它的實例變量,這樣才能被觀察者觀察到。(即:KVO是建立在KVC的基礎上的)
3.多線程
①
4.delegate:(設計模式之一)
①delegate和Notification、block的使用區別
一.block、delegate(1對1之間的通信交互):
delegate實現協議方法,建立了代理關係後纔可以通信(通信事件比較多時使用)
PS:block不需要定義協議方法,更簡便(block類似指針,都可以作爲參數傳遞,用於回調。但是block的實現可以定義在方法中,而函數不可以)
二.notification(1對多通信交互):不需要建立關係,代碼可讀性差
5.控制器
①Viewcontroller中的loadView、viewDidLoad
loadView調用:控制器的根視圖view爲空,且此view被訪問時
viewDidLoad調用:loadView調用後
6.@synthesize、@dynamic、@property
@property和@synthesize:系統自動生成getter和setter屬性聲明,xcode4.4以後可以省略@synthesize,編譯器編譯的時候自動補上(不要寫不代表刪除了)
@dynamic:屬性的獲取和賦值方法用戶自己實現,不自動生成
7.OC的一些特性
①.m後綴的文件可以識別OC和C的代碼
.mm後綴的文件可以識別OC、C和C++的代碼
.cpp文件只能使用C/C++,而且C++的頭文件中也不能有OC的代碼
總結:
cpp文件和cpp的include(頭文件)中不可以包含obj-c的代碼。
OC和C++混用,關鍵是使用接口。實際上cpp混用的是obj-c編譯後的o文件,這個東西其實是無差別的,所以可以用。在cpp中混用OC其實就是使用OC編寫的模塊(這些模塊的後綴名都是.mm)
②私有變量(有):private修飾。OC中沒有設計私有的方法。通過延展在實現文件裏面定義方法作爲私有的方法。但是這不是真正意義上的私有方法。(注意類目和延展的區別)
多繼承(無):所有類都是NSObject的子類,通過protocol委託代理來實現多繼承的效果(協議定義的方法不一定都要實現,@required下的方法必須實現,而java中的接口方法必須都要實現,這點上還是有區別的)
③const int a = int const a;
int *const a;(普通指針,地址可變,a存儲的數值不可變)
const int* a;(常量指針,地址不可變)
④cocoa touch框架簡單舉例:
1.音頻和視頻
Core Audio
OpenAL
Media Library
AV Foundation
2.數據管理
Core Data
SQLite
3.圖形和動畫
Core Animation
OpenGL ES
Quartz 2D
Core Graphics
4.用戶應用
Address Book
Core Location
Map Kit
Store Kit