iOS學習筆記總結整理

 

來源:http://mobile.51cto.com/iphone-386851_all.htmphp

學習IOS開發這對於一個初學者來講,是一件很是撓頭的事情。其實學習IOS開發無外乎平時的積累與總結。下面爲你們整理了一部分的iOS學習筆記總結整理,但願對你們有所幫助。html

一.內存管理狀況編程

  1. NSString *homePath = NSHomeDirectory(); 
  2. NSString *docPath = [homePath stringByAppendingFormat:@"/Documents"]; 
五.UIActionSheet 按鈕列表
六.旋轉
     1- interfaceOrientation屬性查詢當前的界面方向。
     2- rotatingHeaderView方法來查詢當前導航視圖。
     3- rotatingFooterView來查詢當前的標籤條。
七.快速撥打電話接口
openURL能幫助你運行Maps,SMS,Browser,Phone甚至其餘的應用程序。這是Iphone開發中我常常須要用到的一段代碼,它僅僅只有一行而已。
  1. [UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8004664411"]; 
這個程序經過基礎的協議支持撥打電話的功能。
摘自: http://blog.csdn.net/smilelance/article/details/6213125
八.區分設備類型的方法
打電話功能只有iPhone支持,對於其餘設備對應按鈕應該禁用。
1. 用[UIDevice currentDevice].model,這個返回的是一個NSString,你能夠作以下判斷就能知道設備是iPad仍是iPhone.
  1. if ([UIDevice currentDevice].model rangeOfString:@"iPad"].location != NSNotFound) { 
  2.     NSLog(@"This is an iPad!"); 
2. 用UI_USER_INTERFACE_IDIOM()方法,這是系統定義的一條宏。使用方法也很簡單。
  1. if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
  2.     NSLog(@"This is an iPad!"); 
摘自: http://blog.sina.com.cn/s/blog_3f88614f0100sdcm.html

九.併發編程
     1-GCD-Grand Central Dispatch,GCD使用隊列來管理多個任務,而每一個任務是 以塊(其定義相似於函數)來描述的。GCD從隊列中讀取這些要完成的任務,而後其多核執行 引擎負責將這些任務分配給它所管理的線程。和手動線程管理相比,GCD能極大地優化線程管理,並極大地減小建立和銷燬線程所帶來的額外開銷。除了在多核系 統上得性能改進以外,GCD還能幫助提升應用的響應速度,並讓代碼更爲乾淨,易於維護。
     2-NSOperationQueue-操做隊列,能夠極大地減小開發者在併發編程中的負擔,而且操做隊列有一套Objective-C的API,使用起來方便。
    基本操做單位-NSOperation,操做。
    操做是封裝了一個與任務有關的代碼與數據的抽象類,須要繼承NSOperation,而且描述相關的任務。操做對象是一次性的,它只能執行一次,下一次,須要建立一個新的實例。
    能夠經過addDependency:方法爲操做添加相互依賴性。假設操做A依賴於操做B,若是操做B沒有結束,操做A就不會開始執行。完成是指 執行完,或者取消了操做。有時須要對操做是否成功做出判斷。經過removeDependency:方法來移除操做的相互依賴性。
    操做的一個屬性是isConcurrent。當使用操做隊列來管理這些操做時,isConcurrent應當設置爲NO,這時應當重載 NSOperation的main函數(在類中保存controller對象-weak,並在main中調用controller的方法)。 isReady屬性用於描述操做是否已經能夠開始執行,isExecuting屬性表示操做是否正在執行當中,isFinished屬性表示操做是否順利 完成,isCancelled屬性則表示操做已經取消。
    能夠在操做運行中取消它的運行,只須要給它發送cancel消息便可。在繼承NSOperation類時,也須要支持cancel方法。
    若是隻須要簡單的操做,不想繼承NSOperation類,可使用NSInvocationOperation類,這個類中的-initWithTarget:selector:object:方法能幫助你方便地選擇人物的對象和相應的功能。
    操做的執行順序取決於各自的優先級和相互之間的依賴性。
    操做隊列有兩種方式來執行其中的操做。第一種是開闢新線程來運行這些操做,第二種則是經過GCD來運行這些操做。可是不管如何,都不須要手動管理 線程。儘可能使用操做隊列,只有在操做隊列的效率明顯不足時才轉向GCD。由於操做隊列是封裝在GCD的基礎之上的,雖然增長了一些額外開銷,可是也具備更 加完善的功能。例子是TestNSOperation。
                           下頁內容更加精彩實用

十.忙碌指示器
    UIActivityIndicator。
  1. UIActivityIndicatorView *activityIndicatior = [UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhiteLarge]; 
  2.     activityIndicator.center = CGPointMake(512, 384); 
  3.     [self.view addSubview: activityIndicator]; 
  4.     [activityIndicator startAnimating];  
  5.     [activityIndicator stopAnimating]; 
  6.     [activityIndicator removeFromSuperView]; 
十一.媒體播放

1- 音頻
     [1] 音樂每每是存儲在iPod曲庫(注意位置)中的,能夠經過媒體選擇器(media picker)或者媒體查詢(media query)讀取,而後用音樂播放器MPMusicPlayerController播放。
  1. MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer]; 
  2. [musicPlayer setShufleMode: MPMusicShuffleModeSongs]; 
  3. [musicPlayer setRepeatMode: MPMusicRepeatModeAll]; 
  4. [musicPlayer setQueueWithQuery: [MPMediaQuery songsQuery]; 
  5. [musicPlayer play]; 
    applicationMusicPlayer返回的播放器,在你的應用中播放音樂。它不會影響到iPod播放器,也不能從iPod播放器重獲取信息。
    iPodMusicPlayer返回的是iPod播放器,在你推出應用後,全部的設置都會影響到以後設備上的iPod播放器。
    得到音樂播放器後,須要爲它設置一個播放隊列。能夠用setQueueWithQuery:放方法,經過媒體查詢MPMediaQuery來設置 播放隊列,也能夠用setQueueWithItemCollection:方法,經過MPMdiaItemCollection來設置播放隊列。
    重複模式repeatMode能夠設置爲不重複、重複當前曲目、或整個播放列表;亂序播放shuffleMode能夠設置爲不亂序、亂序播放曲目或亂序播放專輯;音量volume的設置與音頻播放器同樣。
    skipToNextItem跳到下一首,skipToPreviousItem跳到上一首,skipToBegin跳到第一首。
    對應的宏都是以MPMusic開頭。
     [2] 利用系統聲音服務來播放短暫音效(時長30秒之內),並震動:   
  1. AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);  
    播放指定音效:
  1. NSURL *fileURL = [NSURL fileURLWithPath: path isDirectory: NO];  
  2. // 建立音效ID 
  3. SystemSoundID soundID; 
  4. AudioServiceCreateSystemSoundID((CFURLRef) fileURL, &soundID); 
  5. // 播放聲音 
  6. AudioServicesPlaySystemSound(soundID); 
     [3] 音頻播放器
    沒有時長限制
  1. NSURL *fileURL = [NSURL fileURLWithPath: path isDirectory: NO]; 
  2. // 用URL來初始化音頻播放器-播放的不是iPod曲庫中的音樂 
  3. AVAudioPlayer* player = [AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: NO]; 
  4. // 準備播放 
  5. [player prepareToPlay]; 
  6. // 設置代理 
  7. [player setDelegate: self]; 
    方法:play、pause、stop。能夠經過playing屬性查詢播放器是否正在播放當中,能夠經過volume屬性來修改和查詢播放器的播放增益(從0.0到1.0),可經過setting屬性查詢播放器其餘設置。

    duration表示音頻的時間長度, currentTime表示當前播放到的時間。播放結束後能夠經過代理方法audioPlayerDidFinishPlaying:來處理播放後設置。
2- 視頻
    視頻播放能夠採用網頁視圖(UIWebView)進行嵌入式播放(能播放YouTube視頻),或者採用電影播放器(MPMoviePlayerController)進行播放。
     [1] 電影播放器
  1. MPMoviePlayerController *player = [MPMoviePlayerController alloc]initWithContentURL: url]; 
  2.     // 設置播放器的大小,並將其加入視圖中 
  3.     [player.view setFrame: rectFrame]; 
  4.     [self.view addSubView: player.view]; 
  5.     播放器的背景視圖backgroundView。 
  6.     全屏[player setFullscreen: YES animated: YES]; 
  7.     播放另外一個影片[player setContentURL: newURL]; 
  8.     [player requestThumbnailImagesAtTimes:arrayTimes timeOption:MPMovieTimeOptionNearestKeyFrame]; // 表示播放器不會在你所指定的時間去截取預覽,而是在絕對時間的附近幾幀中尋找效果最好的幀作爲預覽。 

scalingMode規定了影片的縮放模式。   數組

initialPlaybackTime用來控制視頻開始播放的時間,單位是秒。安全

若是視頻源在網絡上,那麼須要正確設置服務器端的mimeType。
十二.運行環-runloop
    運行環做用於一個iOS應用的整個生命週期。它負責監視各類輸入事件,而且在合適的時候對這些輸入進行分配。應用的每個線程都有且僅有一個運行環。你本身不須要建立也不須要銷燬運行環,可是能夠經過currentRunLoop方法來獲取當前的運行環。

十三.定時器
    因爲運行環機制,定時器的精度不高,只能用於通常性延時。
    例子:拼圖遊戲,DeskViewController.m。
    NSObject類的定時方法。
    performSelector: withObject: afterDelay: 運行方法,參數,時間(秒)。
    performSelectorOnMainThread: withObject: waitUntilDone: 在主線程中,運行參數selector所指定的方法,若是waitUntilDone參數爲YES,那麼當前線程會被阻攔,直到selector運行完。
    performSelector: onThread: withObject: waitUntilDone:同上,但不必定在主線程中運行。
    performSelectorInBackground: withObject: 開啓一個新線程,用於運行selector方法,selector方法應負責線程的初始化。
    cancelPreviousPerformRequestsWithTarget:取消與一個目標相關的全部計劃好的動做。
    cancelPreviousPerformRequestsWithTraget: selector: object只取消特定的計劃動做。
十四.隨機數
0~1之間隨機數
  1. CG_INLINE float genRandomNum() 
  2.     return (float)arc4random/ARCRANDOM_MAX; 
十五.加速度傳感器
    得到加速度傳感器讀數:
  1. UIAccelerometer *accelerometer = [UIAccelerometer shareAccelerometer]; // 單例 
  2. accelerometer.delegate = self; 
  3. accelerometer.updateInterval = 1.0f / 10.0f; // 傳感器更新頻率,普通遊戲10~30HZ,虛擬現實類遊戲,30~60HZ 
  4. accelerometer.x, accelerometer.y, accelerometer.z // 傳感器讀數 
    若不想再接受傳感器讀數,可將代理設置爲nil
  1. [UIAccelerometer shareAccelerometer].delegate = nil;  
  2.  
  3. #define alpha 0.05 
  4. // 得到重力引發的加速度讀數: 
  5. - (void)accelerometer: (UIAccelerometer *)accelerometer didAccelerate: (UIAcceleration *)acceleration 
  6.     // 簡單低通濾波器 
  7.     accelX = (acceleration.x * alpha) + (accelX) * (1.0 - alpha); 
  8.     accelY = (acceleration.y * alpha) + (accelY) * (1.0 - alpha); 
  9.     accelZ = (acceleration.z * alpha) + (accelZ) * (1.0 - alpha); 
  10.      
  11. // 得到動做引發的加速度讀數: 
  12. - (void)accelerometer: (UIAccelerometer *)accelerometer didAccelerate: (UIAcceleration *)acceleration 
  13.     // 減去低通濾波輸出,獲得高通濾波輸出 
  14.     accelX = acceleration.x - ((acceleration.x * alpha) + (accelX) * (1.0 - alpha)); 
  15.     accelY = acceleration.y - ((acceleration.y * alpha) + (accelY) * (1.0 - alpha)); 
  16.     accelZ = acceleration.z - ((acceleration.z * alpha) + (accelZ) * (1.0 - alpha)); 
十六.地圖與鏈接服務器
[1] 添加框架MapKit.framework。使用MKMapView來呈現地圖。注意應當直接使用此類,而不是繼承之。若是但願在MKMapView類之上添加功能,可使用MKMapViewDelegate協議。
    初始化:
  1. MKMapView *mapView = [MKMapView alloc] initWithFrame: rect]; 
    初始化以後並不直接顯示,還須要指定顯示的地圖區域:
  1. CLLocationCoordinate2D coordinate; 
  2. coordinate.latitude = latitudeValue; // 緯度 
  3. coordinate.longtitude = longtitudeValue; // 精度 
  4. mapView.region = MKCoordinateRegionMakeWithDistance(coordinate, width, height); // 指定顯示區域,width和height單位都是米 
    以後能夠經過addSubview添加地圖。
    屬性:showsUserLocation-爲YES,系統會持續跟蹤用戶的位置
          userLocationVisible-爲YES,將顯示用戶所在位置
    顯示地圖以後,經常但願在地圖上添加標註,這須要建立一個類,並實現MKAnnotation協議,這個類叫作標註對象。標註對象每每實現 setCoordinate:方法來設置其座標。在地圖視圖上,能夠設置標註對象的座標,而後添加進去,這樣地圖上就會出現一個標註。代理方法title 和subtitle可以在標註上顯示標題和副標題。  
  1. // 初始化 
  2.    mapView = [MKMapView alloc] initWithFrame: CGRectMake(100, 100, 550, 700)]; 
  3.    mapView.showsUserLocation = TRUE; 
  4.    mapView.mapType = MKMapTypeStandard; 
  5.    mapView.delegate = self; 
  6.    // 設置座標 
  7.    CLLocationCoordinate2D coordinate; 
  8.    coordinate.latitude = 37.31; 
  9.    coordinate.longtitude = -122.03; 
  10.    mapView.region = MKCoordinateRegionMakeWithDistance(coordinate, 4000, 6000); // 4000米寬,6000米高的區域 
  11.    [self.view insertSubview: mapView atIndex: 0]; 
十七.經過storyboard來初始化一個controller
  1. CBigDesignImageViewController *imageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"BigImageController"];  
   BigImageController是要在storyboard中設置的Identifier屬性。

十八.給UIView子類設置陰影,包括各類控件
     1 導入QuartzCore framework
     2 #import <QuartzCore/QuartzCore.h>
     3 編碼:
  1. [imgView layer] setShadowOffset:CGSizeMake(5, 5)]; // 陰影的範圍  
  2. [imgView layer] setShadowRadius:2]; // 陰影擴散的範圍控制  
  3. [imgView layer] setShadowOpacity:1]; // 陰影透明度  
  4. [imgView layer] setShadowColor:[UIColor brownColor].CGColor]; // 陰影的顏色 
十九.設置UIScrollView滾動速度      
  1. // 自動滾動太快,效果很差,這裏把動畫設置慢點,注意下面要直接賦值contentOffset,不要用帶animated參數的函數,不然動畫會出問題,由於兩處都是動畫效果。 
  2.         [UIScrollView animateWithDuration:1.0f  
  3.                                delay:0  
  4.                                options:UIViewAnimationCurveLinear 
  5.                                animations:^{ 
  6.                                    scrollView.contentOffset = CGPointMake(0, 0);  
  7.                                } 
  8.                                completion:^(BOOL finished){} 
  9.                                ];  
  10.         // 若是在減速滾動過程當中,按了刷新按鈕,執行上面的動畫,會出現重置的位置,y不是0的狀況,這裏再調用一次,滾動到0。 
  11.         [scrollView setContentOffset:CGPointMake(0, 0) animated:YES];  
二十.EXC_BAD_ACCESS
Here’s the advice I generally give to developers when you hit an EXC_BAD_ACCESS error:
-Set the NSZombieEnabled argument in your executable options, which sometimes helps narrow down the cause
-Run with Apple Instruments such as Leaks to look for memory issues
-Set a breakpoint in your code and step through until you narrow down where it’s crashing
Tried and true 「comment out code till it works」 then backtrack from there :]

Xcode4 下設置 NSZombieEnabled 的方法: 
你能夠點擊 Xcode4 菜單 Product -> Edit Scheme -> Arguments, 而後將點擊」加號」, 將 NSZombieEnabled 參數加到 Environment Variables 窗口中, 後面的數值寫上 」YES」.
或者在 Xcode4 菜單 Product -> Edit Scheme -> Diagnostics 設置窗口中直接勾上 Enable Zombie Objects 便可,Xcode 可用 cmd+shift+< 進到這個窗口。 
Xcode4 已經考慮到了如今的要求,因此提供了更便捷的設置的方式,你也能夠在這個窗口中設置其餘一些參數,你確定能由此得到更多的幫助信息。
 
好了,看完這篇iOS學習筆記整理,不知道對你是否是有所啓發。
相關文章
相關標籤/搜索