天天看點

2、iOS 開發之字典轉模型和 xib

一、字典轉模型(plist檔案)

模型的封裝方法:(放到代碼倉庫中)

1.在.h檔案中添加與plist檔案key值對應的屬性名

Array --- > NSArray
Dictionary --- > NSDictionary
string ---> NSString
number ---> NSNumber           

注意:屬性名和plist中key值一定要一緻

2..h檔案檔案中屬性的strong weak copy assign的使用

1> strong : 用于一般的對象或自定義的對象類型
2> weak : 用于UI控件和delegate
3> copy : 用于NSString block對象
4> assign : 用于基本資料類型           

3.在.h中添加可以傳入字典參數的構造方法

- (instancetype)initWithDict:(NSDictionary*)dict;
+ (instancetype)xxxWithDict:(NSDictionary*)dict;           

4.在.m檔案中實作對應的構造方法

// 在initWithDict:方法中用KVC一句代碼搞定所有屬性           

5.instancetype和id的差別

1> 相同點:都可以作為方法的傳回值類型

2> 不同點:instancetype編譯器會檢測出真是類型,id可以用在參數類型上

二、KVC

KVC -鍵值編碼,是一種間接修改/讀取對象屬性的一種方法

1.使用注意事項:

1> plist中的鍵值名稱必須與模型中的屬性一緻
2> 模型中的屬性可以不完全出現在plist中,但是如果plist檔案中的屬性不完全出現在屬性中就會出錯。           

三、xib的使用

xib檔案用來描述一塊局部的UI界面

在開發階段面向開發者是xib檔案,裝到手機xib檔案就會轉化為nib檔案

1.xib檔案的加載方法

1> 方法1:建立所有的xib對象,并且将對象按順序放到objs數組中

NSArray * objs = [[NSBundle mainBundle] loadNibNamed:@"appView" owner:nil options:nil];           

2> 方法2

UINib *nib = [UINib nibWithNibName:@"appView" bundle:[NSBundle mainBundle]];
NSArray* objs = [nib instantiateWithOwner:nil options:nil];           

2.xib封裝成view的過程

1> 建立一個內建字UIView的自定義view,假設類名叫做(WBAppView)
2> 建立一個WBAppView.xib檔案來描述WBAppView内部結構
3> 修改xib的類型為WBAppView的真實類型
4> 将内部子控件跟WBAppView進行屬性連線
5> WBAppView提供一個模型屬性
6> 重寫模型屬性的set方法,因為在set方法中可以拿到外界傳遞的模型資料
7> 把模型資料拆開,分别設定資料到對應的子控件中
8> 補充:提供一個建立WBAppView的類方法,将讀取的xib檔案代碼屏蔽起來           

四、懶加載

  • 懶加載:用到時才加載,在get方法中實作的,OC中的get方法是去掉下劃線的屬性名首字母小寫

    用到時:用到了真實資料or用到了get方法(文檔)

- (NSArray *)apps
{
    if (_apps == nil) {

    // 1.獲得plist的全路徑
    NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];

    // 2.加載數組
    NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];

    // 3.将dictArray裡面的所有字典轉成模型對象,放到新的數組中
    NSMutableArray *appArray = [NSMutableArray array];
    for (NSDictionary *dict in dictArray) {
    // 3.1.建立模型對象
    MJApp *app = [MJApp appWithDict:dict];

    // 3.2.添加模型對象到數組中
    [appArray addObject:app];

    }

    // 4.指派
    _apps = appArray;
    }
    return _apps;
}           

補充:不能與控件進行互動

1> alpha <= 0.01
2> hidden = YES
3> userInteraction = NO(父控件的userInteraction = NO)
4> 位置超過了所在父控件的尺寸
// 父視圖不能互動,子視圖也不能互動方法的命名規範:
           

命名法則:

1> 單詞首字母小寫,後面的單詞的首字母大寫
2> initWithxxx: init 初始化函數With單詞必須大寫,因為OC預設的就是"駝峰法",預設初始化函數就是init單詞開頭的,如果是initwithxxx就是認為是initwith單詞開頭的,造成找不到初始化方法
3> 方法,屬性不能以new作為名稱的開頭           

“`

繼續閱讀