2011-10-14 21 views
9

這不是一個有關相關問題的問題。這是我試圖加深對Objective-C或更具體的Cocoa Foundation的理解的問題。什麼時候應該使用NSURL而不是NSString,反之亦然?

當處理從服務器上傳和下載文件到我的應用程序時,我經常在使用NSURLNSString來處理所有相關的事情。當然,當我有一個現有的API時,我只是按照規範來使用它。但是,當我存儲自己的路徑或創建自定義類來處理它們時,我很困惑哪兩個會是更好的選擇。

NSString無處不在,它有便利的方法,如stringByAppendingPathComponent:stringByAppendingPathExtension:。通過在NSURL實例上調用[url path],可以通過創建一個帶有[NSURL URLWithString:@"string"]的新實例並反過來轉換爲NSURL。但差異是有原因的,對吧?

當我看到類似NSFileManager的頭文件時,我的困惑就會增加。這兩種方法都相當接近:

- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error; 
- (BOOL)copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError **)error NS_AVAILABLE(10_6, 4_0); 

爲什麼我會選擇使用一個比其他的,特別是當兩者之間的轉換是那麼容易做?爲什麼Apple經歷了爲使用這兩種數據類型創建幾乎相同的API的麻煩?

如果有人更深入地瞭解何時使用NSURL而不是NSString處理文件路徑和遠程URL的自己的類,請分享!乾杯。

+0

在本地文件系統上引用文件時怎麼辦? – Jason

+0

你是什麼意思? 'NSURL'有一套處理文件系統URL的廣泛的方法(https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html#/)。/apple_ref/DOC/UID/20000301-SW25)。 – epologee

+0

NSString也是如此。看起來NSURL通常是首選,但我想知道是否也帶有本地文件。 – Jason

回答

3

一般爲路徑相關的操作,你應該更喜歡NSURLNSString因爲路徑信息,可以更有效地在NSURL(可按NSFileManager類的引用)存儲。所以我會建議你的API也使用NSURL

而且NSURLURLByAppendingPathComponent:URLByAppendingPathExtension:如此便利的服務以及:-)

+2

+1另外,即將到來的Mac App Store沙盒規則需要權限,這些權限(據我所知)存儲在NSURL本身中,使得更容易歸檔文件系統訪問以供以後使用。 –

8

NSUrl知道如何處理URL的幾乎所有的國王 - 不只是網絡地址還有其拆分爲出入方便大塊:

  • 協議或方案(HTTP,FTP,TELNET,SSH)
  • 用戶名和口令(例如,對於SSH:SSH://用戶:[email protected]
  • 個主機名
  • 端口
  • 路徑
  • GET參數

現在你可以很容易地詢問網址對象爲這個塊,而在串有可能是過度的,如果規則或複雜的需要正則表達式的。

+0

感謝您澄清,+1。我不得不選擇誰給這個標記,@applaudierend在那裏有參考。 – epologee

相關問題