語言的設計主要是被應用于實踐,
而Objective-C應用最廣的地方就是Mac OS X或iOS的Foundation框架。
Foundation框架允許你利用文件系統對文件或目錄執行基本操作,這些基本操作是由NSFileManager類提供的。
使用NSFileHandle類提供的方法,可以打開文件并對文件執行多次讀/寫操作。
NSFileHandle類的方法可以實現如下功能:
1)打開一個文件,執行讀、寫或更新(讀取和寫入)操作。
2)在文件中查找指定位置。
3)從文件中讀取特定數目的字節,或將指定數目的字節寫入文件。
NSFileHandle類提供的方法也可用于各種設備或套接字。
很多語言中使用的框架也有類似的FileHandle。
NSURL類允許在應用中使用URL方法。這個和Java中的URL差不多。
NSBundle類提供了允許在應用中使用包(bundle)的方法,包括搜索包中的特定資源。
這個東西更類似于Android應用中的Resource或R之類干的活。
管理文件和目錄使用NSFileManager,文件或目錄使用文件的路徑名為唯一標識。
完整路徑也稱為絕對路徑,以斜線(/)開始。
特殊的代字符(~)作為用戶主目錄的縮寫。
當前目錄為".";
父目錄為“..”;
這些概念和Linux里面一樣。
每個文件方法都是對NSFileManager對象的調用,
而NSFileManager對象是通過向類發送一條defaultManager消息創建。
iOS的設備上,程序是運行在沙盒中的,它嚴格限定了文件的訪問。
如果在設備中運行這個程序,會看到當前目錄是/,
這說明應用的根目錄是在運行它的沙盒中,并不是整個iOS設備文件目錄的根。
可以這么理解,每一個應用程序都是一個進程,這樣它的作用范圍就是進程的上下文。沙盒就是進程。
這個和Android是一樣的道理。
Android中,每個應用都運行在一個進程中,每個應用都有自己的pid,即進程號。
也不能隨便訪問別的進程的數據或者奔潰時影響到其它應用。這就是沙盒的原理。
其實,這些相同點都是因為它們兩個生態的最底層OS都是unix類似的原理所致。
熟悉Unix的同學都知道,進程,用戶這些概念,其實就是沙盒的概念。
使用路徑用NSPathUtilities.h
components是一個NSArray對象,它包含路徑中每一部分的字符串對象,
Path是一個字符串對象,它指定文件的路徑;ext是路徑擴展名的字符串對象。如@“mp3”
為了保存數據直到下一次運行程序仍能夠使用,可以使用Documents目錄。
每個iOS應用都有自己的Documents目錄供數據寫入。
應用中的Caches目錄也可以用來存儲一些數據。
對于iOS開發說,Apple鼓勵開發者存儲持久化數據到云端。
對于這些Documents的理解,可以這么理解,每個應用程序都是一個用戶。
在類Unix系統中,每一個用戶其實都是在home目錄(Linux系統的home)下的不同用戶文件夾分開。
不同用戶名文件夾中都有基本的文件夾,Documents,Downloads這類的。
簡言之,應用程序一般都屬于某一個用戶(UserId),某一個進程(Pid)。
而且一般情況下不同應用程序的用戶標識和進程標識都是不一樣的。這就是所謂沙盒原理。
NSProcessInfo類中的argments方法返回一個字符串對象數組。
數組的第一個元素是進程名稱,其余的元素是在命令行中輸入的參數。
這個類主要用來記錄當前進程的信息。
其實,我們都知道,unix下的進程入口都是main函數。
這也就是為什么NSProcessInfo會記錄命令行中的輸入參數的原因。
命令行中的輸入參數都是通過main函數的入參傳入的。
基本文件操作:NSFileHandle,可用于標準輸入、標準輸出、標準錯誤和控設備。
應該注意NSFileHandle類并沒有提供創建文件的功能。
創建文件須使用FileManager的方法來創建。
另外,Unix系統下,應注意,打開文件進行寫入并不會截斷文件,需要自己完成截斷。
NSURL對象并不是一個字符串(如@“http://blog.csdn.net/haomengzhu”),
但是使用URLWithString:方法可以由一個字符串對象創建出NSURL對象。
NSBundle類:
當創建一個應用時,系統存儲了應用相關聯的所有數據(其中包括圖片、本地化字符串、圖標等),
將這些內容放入一個稱為應用包(application bundle)的包中。
在應用中添加一個資源(如圖片或文本文件),僅需將文件拖到Xcode的左邊窗格中。
mainBundle方法給出了應用包所在的目錄。這個方法在Mac OS X和iOS中都適用。