自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS學(xué)習(xí)筆記總結(jié)整理

移動開發(fā) iOS
不積跬步無以成千里,學(xué)習(xí)在于點(diǎn)點(diǎn)滴滴的積累,下面為大家整合了一些iOS學(xué)習(xí)筆記總結(jié)整理,希望為各位還在努力學(xué)習(xí)的師弟師妹謀一些福利。

學(xué)習(xí)IOS開發(fā)這對于一個初學(xué)者來說,是一件非常撓頭的事情。其實學(xué)習(xí)IOS開發(fā)無外乎平時的積累與總結(jié)。下面為大家整理了一部分的iOS學(xué)習(xí)筆記總結(jié)整理,希望對大家有所幫助。

一.內(nèi)存管理情況

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

九.并發(fā)編程
    1-GCD-Grand Central Dispatch,GCD使用隊列來管理多個任務(wù),而每個任務(wù)是以塊(其定義類似于函數(shù))來描述的。GCD從隊列中讀取這些要完成的任務(wù),然后其多核執(zhí)行 引擎負(fù)責(zé)將這些任務(wù)分配給它所管理的線程。和手動線程管理相比,GCD能極大地優(yōu)化線程管理,并極大地減少創(chuàng)建和銷毀線程所帶來的額外開銷。除了在多核系 統(tǒng)上得性能改進(jìn)之外,GCD還能幫助提高應(yīng)用的響應(yīng)速度,并讓代碼更為干凈,易于維護(hù)。
    2-NSOperationQueue-操作隊列,可以極大地減少開發(fā)者在并發(fā)編程中的負(fù)擔(dān),并且操作隊列有一套Objective-C的API,使用起來方便。
    基本操作單位-NSOperation,操作。
    操作是封裝了一個與任務(wù)有關(guān)的代碼與數(shù)據(jù)的抽象類,需要繼承NSOperation,并且描述相關(guān)的任務(wù)。操作對象是一次性的,它只能執(zhí)行一次,下一次,需要創(chuàng)建一個新的實例。
    可以通過addDependency:方法為操作添加相互依賴性。假設(shè)操作A依賴于操作B,如果操作B沒有結(jié)束,操作A就不會開始執(zhí)行。完成是指 執(zhí)行完,或者取消了操作。有時需要對操作是否成功作出判斷。通過removeDependency:方法來移除操作的相互依賴性。
    操作的一個屬性是isConcurrent。當(dāng)使用操作隊列來管理這些操作時,isConcurrent應(yīng)當(dāng)設(shè)置為NO,這時應(yīng)當(dāng)重載 NSOperation的main函數(shù)(在類中保存controller對象-weak,并在main中調(diào)用controller的方法)。 isReady屬性用于描述操作是否已經(jīng)可以開始執(zhí)行,isExecuting屬性表示操作是否正在執(zhí)行當(dāng)中,isFinished屬性表示操作是否順利 完成,isCancelled屬性則表示操作已經(jīng)取消。
    可以在操作運(yùn)行中取消它的運(yùn)行,只需要給它發(fā)送cancel消息即可。在繼承NSOperation類時,也需要支持cancel方法。
    如果只需要簡單的操作,不想繼承NSOperation類,可以使用NSInvocationOperation類,這個類中的-initWithTarget:selector:object:方法能幫助你方便地選擇人物的對象和相應(yīng)的功能。
    操作的執(zhí)行順序取決于各自的優(yōu)先級和相互之間的依賴性。
    操作隊列有兩種方式來執(zhí)行其中的操作。第一種是開辟新線程來運(yùn)行這些操作,第二種則是通過GCD來運(yùn)行這些操作。但是無論如何,都不需要手動管理 線程。盡量使用操作隊列,只有在操作隊列的效率明顯不足時才轉(zhuǎn)向GCD。因為操作隊列是封裝在GCD的基礎(chǔ)之上的,雖然增加了一些額外開銷,但是也具有更 加完善的功能。例子是TestNSOperation。
                           下頁內(nèi)容更加精彩實用
#p#
十.忙碌指示器
    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返回的播放器,在你的應(yīng)用中播放音樂。它不會影響到iPod播放器,也不能從iPod播放器重獲取信息。
    iPodMusicPlayer返回的是iPod播放器,在你推出應(yīng)用后,所有的設(shè)置都會影響到之后設(shè)備上的iPod播放器。
    獲得音樂播放器后,需要為它設(shè)置一個播放隊列??梢杂胹etQueueWithQuery:放方法,通過媒體查詢MPMediaQuery來設(shè)置 播放隊列,也可以用setQueueWithItemCollection:方法,通過MPMdiaItemCollection來設(shè)置播放隊列。
    重復(fù)模式repeatMode可以設(shè)置為不重復(fù)、重復(fù)當(dāng)前曲目、或整個播放列表;亂序播放shuffleMode可以設(shè)置為不亂序、亂序播放曲目或亂序播放專輯;音量volume的設(shè)置與音頻播放器一樣。
    skipToNextItem跳到下一首,skipToPreviousItem跳到上一首,skipToBegin跳到第一首。
    對應(yīng)的宏都是以MPMusic開頭。
    [2] 利用系統(tǒng)聲音服務(wù)來播放短暫音效(時長30秒以內(nèi)),并震動:   
  1. AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);  
    播放指定音效:
  1. NSURL *fileURL = [NSURL fileURLWithPath: path isDirectory: NO];  
  2. // 創(chuàng)建音效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. // 準(zhǔn)備播放 
  5. [player prepareToPlay]; 
  6. // 設(shè)置代理 
  7. [player setDelegate: self]; 
    方法:play、pause、stop??梢酝ㄟ^playing屬性查詢播放器是否正在播放當(dāng)中,可以通過volume屬性來修改和查詢播放器的播放增益(從0.0到1.0),可通過setting屬性查詢播放器其他設(shè)置。

    duration表示音頻的時間長度, currentTime表示當(dāng)前播放到的時間。播放結(jié)束后可以通過代理方法audioPlayerDidFinishPlaying:來處理播放后設(shè)置。
2- 視頻
    視頻播放可以采用網(wǎng)頁視圖(UIWebView)進(jìn)行嵌入式播放(能播放YouTube視頻),或者采用電影播放器(MPMoviePlayerController)進(jìn)行播放。
    [1] 電影播放器
  1. MPMoviePlayerController *player = [MPMoviePlayerController alloc]initWithContentURL: url]; 
  2.     // 設(shè)置播放器的大小,并將其加入視圖中 
  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]; // 表示播放器不會在你所指定的時間去截取預(yù)覽,而是在絕對時間的附近幾幀中尋找效果最好的幀做為預(yù)覽。 

scalingMode規(guī)定了影片的縮放模式。   

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

如果視頻源在網(wǎng)絡(luò)上,那么需要正確設(shè)置服務(wù)器端的mimeType。
十二.運(yùn)行環(huán)-runloop
    運(yùn)行環(huán)作用于一個iOS應(yīng)用的整個生命周期。它負(fù)責(zé)監(jiān)視各種輸入事件,并且在合適的時候?qū)@些輸入進(jìn)行分配。應(yīng)用的每一個線程都有且僅有一個運(yùn)行環(huán)。你自己不需要創(chuàng)建也不需要銷毀運(yùn)行環(huán),但是可以通過currentRunLoop方法來獲取當(dāng)前的運(yùn)行環(huán)。

十三.定時器
    由于運(yùn)行環(huán)機(jī)制,定時器的精度不高,只能用于一般性延時。
    例子:拼圖游戲,DeskViewController.m。
    NSObject類的定時方法。
    performSelector: withObject: afterDelay: 運(yùn)行方法,參數(shù),時間(秒)。
    performSelectorOnMainThread: withObject: waitUntilDone: 在主線程中,運(yùn)行參數(shù)selector所指定的方法,如果waitUntilDone參數(shù)為YES,那么當(dāng)前線程會被阻攔,直到selector運(yùn)行完。
    performSelector: onThread: withObject: waitUntilDone:同上,但不一定在主線程中運(yùn)行。
    performSelectorInBackground: withObject: 開啟一個新線程,用于運(yùn)行selector方法,selector方法應(yīng)負(fù)責(zé)線程的初始化。
    cancelPreviousPerformRequestsWithTarget:取消與一個目標(biāo)相關(guān)的所有計劃好的動作。
    cancelPreviousPerformRequestsWithTraget: selector: object只取消特定的計劃動作。
十四.隨機(jī)數(shù)
0~1之間隨機(jī)數(shù)
  1. CG_INLINE float genRandomNum() 
  2.     return (float)arc4random/ARCRANDOM_MAX; 
十五.加速度傳感器
    獲得加速度傳感器讀數(shù):
  1. UIAccelerometer *accelerometer = [UIAccelerometer shareAccelerometer]; // 單例 
  2. accelerometer.delegate = self; 
  3. accelerometer.updateInterval = 1.0f / 10.0f; // 傳感器更新頻率,普通游戲10~30HZ,虛擬現(xiàn)實類游戲,30~60HZ 
  4. accelerometer.x, accelerometer.y, accelerometer.z // 傳感器讀數(shù) 
    若不想再接受傳感器讀數(shù),可將代理設(shè)置為nil
  1. [UIAccelerometer shareAccelerometer].delegate = nil;  
  2.  
  3. #define alpha 0.05 
  4. // 獲得重力引起的加速度讀數(shù): 
  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. // 獲得動作引起的加速度讀數(shù): 
  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)); 
十六.地圖與連接服務(wù)器
[1] 添加框架MapKit.framework。使用MKMapView來呈現(xiàn)地圖。注意應(yīng)當(dāng)直接使用此類,而不是繼承之。如果希望在MKMapView類之上添加功能,可以使用MKMapViewDelegate協(xié)議。
    初始化:
  1. MKMapView *mapView = [MKMapView alloc] initWithFrame: rect]; 
    初始化之后并不直接顯示,還需要指定顯示的地圖區(qū)域:
  1. CLLocationCoordinate2D coordinate; 
  2. coordinate.latitude = latitudeValue; // 緯度 
  3. coordinate.longtitude = longtitudeValue; // 精度 
  4. mapView.region = MKCoordinateRegionMakeWithDistance(coordinate, width, height); // 指定顯示區(qū)域,width和height單位都是米 
    之后可以通過addSubview添加地圖。
    屬性:showsUserLocation-為YES,系統(tǒng)會持續(xù)跟蹤用戶的位置
          userLocationVisible-為YES,將顯示用戶所在位置
    顯示地圖之后,常常希望在地圖上添加標(biāo)注,這需要創(chuàng)建一個類,并實現(xiàn)MKAnnotation協(xié)議,這個類叫做標(biāo)注對象。標(biāo)注對象往往實現(xiàn) setCoordinate:方法來設(shè)置其坐標(biāo)。在地圖視圖上,可以設(shè)置標(biāo)注對象的坐標(biāo),然后添加進(jìn)去,這樣地圖上就會出現(xiàn)一個標(biāo)注。代理方法title 和subtitle能夠在標(biāo)注上顯示標(biāo)題和副標(biāo)題。  
  1. // 初始化 
  2.    mapView = [MKMapView alloc] initWithFrame: CGRectMake(100, 100, 550, 700)]; 
  3.    mapView.showsUserLocation = TRUE; 
  4.    mapView.mapType = MKMapTypeStandard; 
  5.    mapView.delegate = self; 
  6.    // 設(shè)置坐標(biāo) 
  7.    CLLocationCoordinate2D coordinate; 
  8.    coordinate.latitude = 37.31; 
  9.    coordinate.longtitude = -122.03; 
  10.    mapView.region = MKCoordinateRegionMakeWithDistance(coordinate, 4000, 6000); // 4000米寬,6000米高的區(qū)域 
  11.    [self.view insertSubview: mapView atIndex: 0]; 
十七.通過storyboard來初始化一個controller
  1. CBigDesignImageViewController *imageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"BigImageController"];  
   BigImageController是要在storyboard中設(shè)置的Identifier屬性。

十八.給UIView子類設(shè)置陰影,包括各種控件
    1 導(dǎo)入QuartzCore framework
    2 #import <QuartzCore/QuartzCore.h>
    3 編碼:
  1. [imgView layer] setShadowOffset:CGSizeMake(5, 5)]; // 陰影的范圍  
  2. [imgView layer] setShadowRadius:2]; // 陰影擴(kuò)散的范圍控制  
  3. [imgView layer] setShadowOpacity:1]; // 陰影透明度  
  4. [imgView layer] setShadowColor:[UIColor brownColor].CGColor]; // 陰影的顏色 
十九.設(shè)置UIScrollView滾動速度      
  1. // 自動滾動太快,效果不好,這里把動畫設(shè)置慢點(diǎn),注意下面要直接賦值contentOffset,不要用帶animated參數(shù)的函數(shù),否則動畫會出問題,因為兩處都是動畫效果。 
  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.         // 如果在減速滾動過程中,按了刷新按鈕,執(zhí)行上面的動畫,會出現(xiàn)重置的位置,y不是0的情況,這里再調(diào)用一次,滾動到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 下設(shè)置 NSZombieEnabled 的方法: 
你可以點(diǎn)擊 Xcode4 菜單 Product -> Edit Scheme -> Arguments, 然后將點(diǎn)擊”加號”, 將 NSZombieEnabled 參數(shù)加到 Environment Variables 窗口中, 后面的數(shù)值寫上 ”YES”.
或者在 Xcode4 菜單 Product -> Edit Scheme -> Diagnostics 設(shè)置窗口中直接勾上 Enable Zombie Objects 即可,Xcode 可用 cmd+shift+< 進(jìn)到這個窗口。 
Xcode4 已經(jīng)考慮到了現(xiàn)在的要求,所以提供了更便捷的設(shè)置的方式,你也可以在這個窗口中設(shè)置其他一些參數(shù),你肯定能由此獲得更多的幫助信息。
 
好了,看完這篇iOS學(xué)習(xí)筆記整理,不知道對你是不是有所啟發(fā)。
責(zé)任編輯:閆佳明 來源: csdn
相關(guān)推薦

2009-06-17 14:21:39

core java

2009-08-13 18:21:52

C#學(xué)習(xí)筆記

2010-06-13 13:44:07

UML學(xué)習(xí)筆記

2010-06-30 18:09:22

UML建模

2010-01-14 17:02:10

學(xué)習(xí)C++

2012-05-14 16:59:40

iOS

2015-01-12 09:40:41

iOS學(xué)習(xí)資料整理

2015-01-12 12:12:00

iOS學(xué)習(xí)資料整理

2010-06-02 09:06:26

SVN學(xué)習(xí)

2010-06-17 16:42:04

UML

2009-07-14 17:01:24

JDBC基礎(chǔ)

2009-09-08 16:11:20

CCNA(640-80

2009-12-17 16:15:00

CCNP學(xué)習(xí)筆記

2010-01-26 17:53:05

C++入門學(xué)習(xí)

2010-07-09 14:05:56

UML建模

2011-07-08 18:28:43

iOS 接口

2011-08-22 15:43:08

IOS開發(fā)數(shù)據(jù)庫

2012-10-09 10:26:52

Linux目錄權(quán)限

2010-02-05 14:48:04

Android手機(jī)操作

2012-05-14 17:06:46

iOS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號