1- autorelease,當用戶的代碼在持續運行時,自動釋放池是不會被銷燬的,這段時間內用戶能夠安全地使用自動釋放的對象。當用戶的代碼運行告一段 落,開始等待用戶的操做,自動釋放池就會被釋放掉(調用dealloc),池中的對象都會收到一個release,有可能會所以被銷燬。
2-成員屬性:
readonly:不指定readonly,默認合成getter和setter方法。外界絕不關心的成員,則不要設置任何屬性,這樣封裝能增長代碼的獨立性和安全性。至關於私有成員?
assign:表示只進行簡單的賦值,不會發送retain消息。
retain:會向舊值發送release消息,向新值發送retain消息。
copy:向舊值發release消息,向新值發送copy消息。
3-引用計數特殊狀況:
NSArray:當把一個對象添加到NSArray時,對象的引用計數會加1,移除時會減1。
UIView:addGestureRecognizer會對手勢識別器的引用計數加1,removeGestureRecognizer會減1。
二 .圖形API
這個講的好,清晰明確:
http://www.cocoachina.com/bbs/read.php?tid=77731&page=1
1-Quartz2D,的繪圖老是發生在圖形環境(Graphics Context)中。視圖會在調用drawRect:方法進行繪圖以前,建立好圖形環境,
經過UIGraphicsGetCurrentContext函數來得到這個圖形環境。
若是直接在圖像或者PDF上繪圖,須要調用CGBitmapContextCreate或者CGPDFContextCreate函數來建立圖形環境。
Quartz2D繪圖的基礎元素是路徑。路徑能夠是一些基礎幾何形狀,也能夠是這些幾何形狀的組合。
當須要建立一條路徑時,應當調用CGContextBeginPath函數;
當須要將路徑繪製的起點移動到一個位置時,應當調用CGContextMoveToPoint函數;
當想繪製一條線段時,應當調用CGContextAddLineToPoint。 CTM(當前變換矩陣)將繪圖從用戶空間映射到設備控件。
當圖形環境剛剛建立時,CTM初始化爲一個單位矩陣。
對CTM進行平移變換應當調用CGContextTranslateCTM函數,進行旋轉變換應當調用CGContextRotateCTM函數,進行縮放變換應當調用CGContextScaleCTM函數。
2-UIBezierPath
使用UIBezierPath繪圖的好處:
-採用系統座標系
-在Core Graphics的基礎上封裝,具備Core Graphics的主要功能,無需考慮圖形環境。
UIBezierPath* pathLines = [UIBezierPath bezierPath];
[pathLines moveToPoint:point1]; // 移動到point1位置
[pathLines addLineToPoint:point2]; // 畫一條從point1到point2的線
pathLines.lineWidth = 5.0; // 線寬
[UIColor redColor] set]; // 顏色設置
[pathLines stroke]; // 開始描繪
在同一UIBazierPath中,只能採用相同的顏色和線寬。
能夠調用closePath,從當前點畫一條直線到當前子路徑的初始點。若是要填充路徑,應當使用fill方法,此方法會填充路徑中得全部封閉子路徑。
三.容器
-NSArray和NSMutableArray
+array:建立一個空數組
+arrayWithArray:從另外一個數組建立新的數組
+arrayWithContentsOfFile:讀文件建立數組
+arrayWithObject:建立一個數組,其中包含一個給定對象
+arrayWithObjects
+arrayWithObjects:count: 從C數組建立
-containsObject:是否包含一個元素
-count:數量
-lastObject:返回最後一個
-objectAtIndex:返回某一個
-objectsAtIndexes:返回一組,類型爲NSArray
-indexOfObject:返回對象索引
-arrayByAddingObject:原數組最後加一個對象,產生一個新的數組
-arrayByAddingObjectsFromArray:在原數組的最後添加另外一個數組中的全部對象,產生一個新數組
-subarrayWithRange:抽取原數組中得一部分,產生一個新的數組
-isEqualToArray:比較兩個數組是否相同
-writeToFile:atomically:保存數組至一個文件
-writeToURL:atomically:保存數組至一個URL
-addObject:在數組最後添加一個對象
-addObjectsFromArray:在原數組最後添加另外一個數組的所有對象
-insertObject:atIndex:向原數組制定位置添加一個對象
-insertObjects:atIndexes:向原數組中一系列位置添加一系列對象
-removeAllObjects:移除數組中的所有對象
-removeLastObject:移除數組中最後一個對象
-removeObject:移除一個對象
-removeObjectAtIndex:移除位於指定位置的對象
-removeObjectsAtIndexes:移除位於一系列位置的對象
-replaceObjectAtIndex:withObject用給定對象替換位於指定位置的對象
-replaceObjectsAtIndexes:withObjects:多對象,多位置版本
-setArray:用另外一個數組中的全部對象來替換當前數組中的全部對象
-NSDictionary與NSMutableDictionary
+dictionary
+dictionaryWithContentsOfFile
+dictionaryWithContentsOfURL
+dictionaryWithDictionary
+dictionaryWithObject:forKey
+dictionaryWithObjects:forKeys
+dictionaryWithObjectsAndKeys
-count:數量
-allKeys:返回一個數組,包含字典中的全部關鍵字。
-allKeysForObject:返回一個數組,包含全部對應到給定對象的關鍵字。
-valueForKey:經過字符串查找數值。
-writeToFile:atomically
-writeToURL:atomically
-setValue:forKey: 加鍵-值對
-addEntriesFromDictionary: 添加另外一個字典中得全部條目
-setDictionary:將原字典中條目設置爲另外一個字典中得全部條目
-removeObjectForKey:移除一個關鍵字的對應條目
-removeAllObjects:移除全部條目
-removeObjectsForKeys:移除一系列關鍵字的對應條目
四.文件系統
1- 概述
bundle(沙盒):一個應用只能在本身的沙盒中讀取或存儲文件,而不能操做其餘沙盒中的文件。好處:保護應用的隱私不受侵犯,保護系統文件的安排,應用刪除後相關文件也能被所有清除。
每一個應用都有本身的沙盒,沙盒的根目錄的獲取方法是NSHomeDirectory()。
根目錄下的內容:
-.app文件,其實是一個文件夾,包含了可執行文件、Nib文件、圖片資源、plist等。XCode中能看到的資源,及編譯後的可執行文件,都封裝在app中。
-Documents文件夾,用於存放你的應用所產生的數據,該文件夾可經過iTunes備份,能夠存儲遊戲進度等。
-Library文件夾,用於存放用戶偏好和臨時文件。
-tmp文件夾是系統的中轉站。
2-文件管理器
NSFileManager,defaultManager()返回一個文件管理器的單例(多線程下不安全)。init(),在多線程編程中應儘可能使用init()。
代理方法:-fileManager:shouldRemoveItemAtPath和-fileManager:shouldRemoveItemAtURL在移除操做以前被調用。
-removeItemAtPath:error:刪除位於指定路徑的文件、鏈接、目錄(及其全部子目錄、文件)。
-removeItemAtURL:error:同上。
-contentOfDirectoryAtPath:查找全部位於給定路徑的子路徑和文件。返回值爲一個數組,其中包含了NSString對象。查找只在當前目錄進行,不會進入下一層目錄。
-subpathsAtPath:查找給定路徑下的全部子路徑。深度查找,不限於當前層,也會查找package的內容。
-fileExistsAtPath:判斷文件是否位於一個路徑下面。
-isReadableFileAtPath:查詢文件的可讀性
-isWritableFileAtPath:可寫性
-isExecutableFileAtPath:查詢文件的可執行性
-isDeletableFileAtPath:可刪除性
3-NSString的路徑功能
-pathWithComponent:參數是一堆components構成的數組,返回的路徑是由這些components鏈接而成的路徑字符串,相鄰components之間用/隔開。
-pathComponents:返回一個數組,包含路徑中的components。
-fileSystemRepresentation:返回C字符串
-isAbsolutePath:判斷是否爲絕對路徑
-pathExtension:返回文件的擴展名,沒有的就返回空字符串
-stringByAppendingPathComponents :向現有路徑添加一個component。斜槓/會被自動加上
-stringByAppendingPathExtension:向現有路徑加上文件的擴展名
-stringByDeletingLastPathComponent:移除最後一個路徑component
-stringByDeletingPathExtension:刪除路徑擴展名
-stringByAppendingPaths:參數爲一個數組,此方法將數組中的字符串對象做爲路徑一次添加到源字符串後面。
例子:
applicationMusicPlayer返回的播放器,在你的應用中播放音樂。它不會影響到iPod播放器,也不能從iPod播放器重獲取信息。
iPodMusicPlayer返回的是iPod播放器,在你推出應用後,全部的設置都會影響到以後設備上的iPod播放器。
得到音樂播放器後,須要爲它設置一個播放隊列。能夠用setQueueWithQuery:放方法,經過媒體查詢MPMediaQuery來設置 播放隊列,也能夠用setQueueWithItemCollection:方法,經過MPMdiaItemCollection來設置播放隊列。
重複模式repeatMode能夠設置爲不重複、重複當前曲目、或整個播放列表;亂序播放shuffleMode能夠設置爲不亂序、亂序播放曲目或亂序播放專輯;音量volume的設置與音頻播放器同樣。
skipToNextItem跳到下一首,skipToPreviousItem跳到上一首,skipToBegin跳到第一首。
對應的宏都是以MPMusic開頭。
[2] 利用系統聲音服務來播放短暫音效(時長30秒之內),並震動:
方法:play、pause、stop。能夠經過playing屬性查詢播放器是否正在播放當中,能夠經過volume屬性來修改和查詢播放器的播放增益(從0.0到1.0),可經過setting屬性查詢播放器其餘設置。
duration表示音頻的時間長度, currentTime表示當前播放到的時間。播放結束後能夠經過代理方法audioPlayerDidFinishPlaying:來處理播放後設置。
2- 視頻
視頻播放能夠採用網頁視圖(UIWebView)進行嵌入式播放(能播放YouTube視頻),或者採用電影播放器(MPMoviePlayerController)進行播放。
[1] 電影播放器