標籤:
一、用模型取代字典的好處•使用字典的壞處Ø 一般情況下,設定資料和取出資料都使用“字串類型的key”,編寫這些key時,編譯器不會有任何友善提示,需要手敲
dict[@"name"] = @"Jack";
NSString *name = dict[@"name"];
Ø 手敲字串key,key容易寫錯Ø Key如果寫錯了,編譯器不會有任何警告和報錯,造成設錯資料或者取錯資料 •使用模型的好處Ø 所謂模型,其實就是資料模型,專門用來存放資料的對象,用它來表示資料會更加專業Ø 模型設定資料和取出資料都是通過它的屬性,屬性名稱如果寫錯了,編譯器會馬上報錯,因此,保證了資料的正確性Ø 使用模型訪問屬性時,編譯器會提供一系列的提示,提高編碼效率
app.name = @"Jack”;
NSString *name = app.name
二、字典轉模型•字典轉模型的過程最好封裝在模型內部•模型應該提供一個可以傳入字典參數的構造方法Ø - (instancetype)initWithDict:(NSDictionary *)dict;Ø + (instancetype)xxxWithDict:(NSDictionary *)dict;三、instancetype•instancetype在類型表示上,跟id一樣,可以表示任何物件類型•instancetype只能用在傳回值類型上,不能像id一樣用在參數類型上•instancetype比id多一個好處:編譯器會檢測instancetype的真實類型四、Xib檔案的使用•Xib檔案可以用來描述某一塊局部的UI介面•Xib檔案的載入Ø 方法1
NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"MJAppView" owner:nil options:nil];
這個方法會建立xib中的所有對象,並且將對象按順序放到objs數組中
(如果xib如右圖所示,那麼objs數組中依次會有3個對象:1個UIView、1個UIButton、1個UISwitch)
Ø 方法2
bundle參數可以為nil,預設就是main bundle
UINib *nib = [UINib nibWithNibName:@"MJAppView" bundle:[NSBundle mainBundle]];
NSArray *objs = [nib instantiateWithOwner:nil options:nil];
•在開發階段,面向開發人員的是xib檔案; 當把應用裝到手機上時,xib檔案就會轉為nib檔案五、Xib和storyboard對比•共同點:Ø 都用來描述軟體介面Ø 都用Interface Builder工具來編輯 •不同點Ø Xib是輕量級的,用來描述局部的UI介面Ø Storyboard是重量級的,用來描述整個軟體的多個介面,並且能展示多個介面之間的跳轉關係六、view的封裝•如果一個view內部的子控制項比較多,一般會考慮自訂一個view,把它內部子控制項的建立屏蔽起來,不讓外界關心•外界可以傳入對應的模型資料給view,view拿到模型資料後給內部的子控制項設定對應的資料七、小結
1.Xcode內建標頭檔的路徑
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/System/Library/Frameworks/UIKit.framework/Headers
2.修改了系統內建標頭檔後,Xcode會報錯
解決方案:刪掉下面檔案夾的緩衝即可(aplle是電腦的使用者名稱)
/Users/aplle/資產庫/Developer/Xcode/DerivedData
或者
/Users/aplle/Library/Developer/Xcode/DerivedData
3.使用xib封裝一個自訂view的步驟
1> 建立一個繼承UIView的自訂view,假設類名叫做(MJAppView)
2> 建立一個MJAppView.xib檔案來描述MJAppView內部的結構
3> 修改UIView的類型為MJAppView真是類型
4> 將內部的子控制項跟MJAppView進行屬性連線
5> MJAppView提供一個模型屬性
6> 重寫模型屬性的set方法,因為在set方法中可以拿到外界傳遞的模型資料
7> 把模型資料拆開,分別設定資料到對應的子控制項中
8> 補充:提供一個建立MJAppView的類方法,將讀取xib檔案的代碼屏蔽起來
ios--小結系列三