iOS資源管理

來源:互聯網
上載者:User
裝置指定資源

    檔案名稱格式如下:
            <basename><device>.<filename_extension>
        <basename>表示資源檔的原始名稱,也是代碼訪問該檔案的名稱;
        <filename_extension>就是標準的副檔名;
        <device>表示裝置指定修飾符:
            ~ipad:只用在iPad裝置上
            ~iphone:只用在iPhone或iPod touch裝置上。
    資源載入路由:
        如果裝置指定資源不存在,系統才會去尋找以原始檔案名命名的資源檔。

字串資源

    建立字串資源檔
        1、選擇需要本地化的字串
        2、字串載入宏
            Core Foundation宏:
                CFCopyLocalizedString
                CFCopyLocalizedStringFromTable
                CFCopyLocalizedStringFromTableInBundle
                CFCopyLocalizedStringWithDefaultValue   
            Foundation宏:
                NSLocalizedString
                NSLocalizedStringFromTable
                NSLocalizedStringFromTableInBundle
                NSLocalizedStringWithDefaultValue
            上述宏擷取目前使用者語言喜好設定對應的字串值,另外,genstrings工具通過搜尋這些宏來構建字串檔案。
        3、使用genstrings命令列工具建立字串檔案
                genstrings -o en.lproj *.m
            -o參數指定輸出檔案
            *.m指定原始碼檔案名稱的萬用字元
    格式化字串資源
        使用n$引用源字串中的指定位置的預留位置
            /* Message in alert dialog when something fails */
            "%@ Error! %@ failed!" = "%2$@ blah blah, %1$@ blah!";
    在字串資源中使用特別字元
        逸出字元\
        Unicode字元\uxxxx(必須傳遞給genstrings工具-u參數)
    調試字串資源
        plutil -lint

映像、聲音、剪輯資源

    iOS 4.0高解析度影像檔格式如下:
            <basename>@2x.<filename_extension>
        Note:@2x修飾符應該在任何裝置修飾符之前,其他修飾符(方向、URL模式)之後。

Nib資源

    Nib檔案一覽
        Interface對象
            Interface對象是添加至Interface Builder文檔中實現使用者介面的元素。當nib檔案在運行時被載入時,Interface對象就是nib載入代碼實際建立的對象。
        File's Owner
            File's Owner對象是個代理對象,並不是在nib檔案載入時建立,相反,你需要在自己的代碼中建立並傳遞給nib載入的代碼。該對象的重要性體現在其為應用程式代碼和nib檔案內容的主要串連。特別地,其是負責nib檔案內容的控制對象。
        First Responder
            First Responder對象是個代理對象,表示應用程式動態確定的響應者鏈的第一個對象。因為不能在設計時就確定應用程式的響應者鏈,First Responder代理作為響應者鏈中接受行為訊息的替代目標。
        Top-Level Objects
            Top-Level對象是nib檔案載入後,對象圖中沒有父物件的對象。File’s Owner、First Responder和Application對象是代理對象,不是Top-level對象。
        載入Nib檔案
            通過NSBundle載入
                    - (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options;
                owner參數即File's Owner對象。
                返回Top-Level對象的數組。
            通過UIViewController載入
                    - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle;
                File's Owner對象為UIViewController對象本身。

    Nib檔案設計指南
        消極式載入——nib檔案只包含立即引用的對象,不是載入完成時就引用的對象放在另一個nib檔案中,直到實際引用時再載入。

    Nib對象的生命週期
        載入過程
            1、載入nib檔案的內容和所有引用資源至記憶體
                ●載入歸檔的整個nib對象圖的未經處理資料
                ●載入關聯的所有自訂的映像資源並加入映像緩衝
                ●載入關聯的所有自訂的聲音資源並加入聲音緩衝(iOS是否有?)
            2、逆歸檔對象圖並初始化對象
                ●標準的IB對象(包括這些對象所屬類的子類的對象)通過initWithCoder:初始化
                    在iOS中,任何實現NSCoding協議的對象都通過initWithCoder:方法初始化,包括UIView和UIViewController及其子類
                ●其他自訂對象通過init方法初始化
            3、建立所有nib檔案中對象間的串連(包括action、outlet和binding)
                ●Outlet串連
                    iOS通過setValue:forKey:方法重建outlet串連,會產生KVO通知。
                ●Action串連
                    iOS通過addTarget:action:forControlEvents:方法配製action,如果target為nil,action會被響應者鏈處理。
                ●binding
                    iOS不支援
            4、發送awakeFromNib訊息給相應的對象,發此訊息的順序無法保證。iOS不發送該訊息給File’s Owner、First Responder和其他代理對象。
            5、顯示所有“Visible at launch time”為真的視窗。

    Nib檔案的內建支援
        可以通過Info.plist檔案中的NSMainNibFile關鍵字指定應用程式載入主視窗Nib檔案。

    載入時替換代理對象
        代理對象表示在nib檔案之外建立單與nib檔案的內容有串連的對象。
            - (void)applicationDidFinishLaunching:(UIApplication *)application {
                NSArray*    topLevelObjs = nil;
                NSDictionary*    proxies = [NSDictionary dictionaryWithObject:self forKey:@"AppDelegate"];    // nib檔案中的標籤
                NSDictionary*    options = [NSDictionary dictionaryWithObject:proxies forKey:UINibExternalObjects];

                topLevelObjs = [[NSBundle mainBundle] loadNibNamed:@"Main" owner:self options:options];
                if ([topLevelObjs count] == 0) {   
                    NSLog(@"Warning! Could not load myNib file.\n");
                    return;
                }

                // Show window
                [window makeKeyAndVisible];
            }

   

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.