<iOS開發進階> 乾貨匯總

來源:互聯網
上載者:User

標籤:

之前看完了<iOS開發進階>, 也做了相應的總結, 詳見:讀<iOS開發進階>有感

今天花點時間, 把一些乾貨匯總下, 然後就可以和這本書say goodbye了。

包括:

  1. p85 10.1.3
  2. p96 使用GCD後
  3. p99 後台運行
  4. p131 使用Safari進行調試
  5. p184 收合鍵盤
  6. p185 設定應用內的系統控制語言
  7. p193 忽略編譯警告
  8. p198 給模擬器相簿增加圖片


10.1.3 不要向已經釋放的對象發送訊息
有些讀者想測試當對象釋放時, 其retainCount 是否變為了0, 他們的實驗代碼如下: (記得要在Appdelegate.m 中 設定為MRC -fno-objc-arc)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    // Override point for customization after application launch.        NSObject *object = [[NSObject alloc] init];    NSLog(@"Reference Count = %u", [object retainCount]);        [object release];    NSLog(@"Reference Count = %u", [object retainCount]);    return YES;}// 列印結果// 2015-01-21 10:04:05.799 MRC_Test[2985:607] Reference Count = 1// 2015-01-21 10:04:05.800 MRC_Test[2985:607] Reference Count = 1

我們注意到, 最後一次輸出, 引用計數沒有變成0。因為該對象的記憶體已經被回收,而我們向一個已經被回收的對象發一個retainCount訊息,所以它的輸出結果應該是不確定的,如果該對象所佔的記憶體被複用了,那麼就有可能造成程式異常崩潰。那為什麼這個對象被回收之後,這個不確定的值是1而不是0呢。這是因為當最後一次執行release時,系統知道馬上就要回收記憶體了。就沒有必要再將retainCount減1了,因為不管減不減1,該對象都肯定會被回收。而對象被回收後,它的所有記憶體地區,包括retainCount值也變得沒有意義。不將這個值從1變為0,可以減少一次記憶體的操作,加速對象的回收。

使用GCD後






11.2.4 後台運行
使用block的另一個用處是可以讓程式在後台較長久地運行。在以前, 當應用被按Home鍵退出後,應用僅有最多5秒鐘的時間做一些儲存或清理資源的工作。但是應用可以調用UIApplication 的 beginBackgroundTaskWithExpirationHandler方法,讓應用最多有10分鐘的時間在後台長久運行。這個時間可以用來做清理本機快取,發送統計資料等工作。
// Appdelegate.h
@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;

// Appdelegate.m
launchOptions{    // Override point for customization after application launch.    return YES;}- (void)applicationWillResignActive:(UIApplication *)application{    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.}- (void)applicationDidEnterBackground:(UIApplication *)application{        [self beginBackgroundUpdateTask];        //在這裡添加需要長久啟動並執行代碼        [self endBackgroundUpdateTask];}- (void)beginBackgroundUpdateTask{    self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{        [self endBackgroundUpdateTask];    }];}- (void)endBackgroundUpdateTask{    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundUpdateTask];    self.backgroundUpdateTask = UIBackgroundTaskInvalid;}




15.7  使用Safari進行調試






18.2.2  收合鍵盤


在UIViewController中收合鍵盤, 除了調用相應控制項的resignFirstResponder 方法外, 還有另外三種辦法:

1. 重載 UIViewController 中的 touchesBegin方法, 然後在裡面執行 [self.view endEdiiting: YES]; 這樣單擊UIViewController的任意地方, 就可以收合鍵盤。

2. 直接執行[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to: nil from: nil forEvent: nil]; 用於在獲得當前UIViewController比較困難的時候用。

3. 直接執行 [[[UIApplication sharedApplication] keyWindow] endEditing: YES]



18.2.4  設定應用內的系統控制語言


在iOS應用中, 有時候會需要調用系統的一些UI控制項, 例如:

1. 在UIWebView中長按彈出系統的操作功能表。

2. 在UIImagePickerController中會使用系統的照相機介面。

3. 在編譯狀態下的UITableViewCell, 處於待刪除狀態時, 會有一個系統的刪除按鈕。


以上這些UI控制項, 其顯示的語言並不是和你當前手機的系統語言一致, 而是根據你的應用內部的語言設定來顯示。


在 info.plist檔案中, 增加:

CFBundleLocalizations     zh_CN



18.2.9  忽略編譯警告


使用-w禁止掉所有的編譯警告, 用-Wno-unused-variable 只禁止未使用變數的編譯警告。

(用法和 -fno-objc-arc 一樣)



18.4.3  給模擬器相簿增加圖片


... 直接把圖片拖放到模擬器中, 會利用Safari開啟, 然後儲存即可。


<iOS開發進階> 乾貨匯總

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.