2011-10-14 35 views
9

Đây không phải là một câu hỏi về một vấn đề thích hợp. Đó là một câu hỏi mà tôi cố gắng làm sâu sắc thêm sự hiểu biết của tôi về mục tiêu C hoặc cụ thể hơn về Quỹ Cacao.Khi nào tôi nên sử dụng NSURL thay vì NSString và ngược lại?

Khi xử lý việc tải lên và tải xuống tệp từ máy chủ đến ứng dụng của tôi, tôi liên tục bị rách giữa việc sử dụng NSURL hoặc NSString cho mọi thứ liên quan đến đường dẫn. Tất nhiên khi có một API hiện tại tôi chỉ sử dụng nó theo các thông số kỹ thuật. Nhưng khi tôi lưu trữ các đường dẫn của riêng mình hoặc tạo các lớp tùy chỉnh đối phó với chúng, tôi bị nhầm lẫn mà trong đó hai sẽ là lựa chọn tốt hơn.

NSString được sử dụng ở mọi nơi và có các phương pháp tiện lợi như stringByAppendingPathComponent:stringByAppendingPathExtension:. Tôi có thể dễ dàng chuyển đổi sang NSURL bằng cách tạo một cá thể mới với [NSURL URLWithString:@"string"] và cách khác xung quanh bằng cách gọi [url path] trên phiên bản NSURL. Nhưng sự khác biệt là có một lý do, phải không?

Sự nhầm lẫn của tôi phát triển khi tôi xem các tệp tiêu đề của một cái gì đó như NSFileManager. Hai phương pháp này khá gần nhau:

- (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); 

Tại sao tôi lại chọn sử dụng một phương thức khác, đặc biệt khi chuyển đổi giữa hai phương pháp này được thực hiện dễ dàng như vậy? Và tại sao Apple phải trải qua sự cố khi tạo các API gần giống hệt nhau để sử dụng cả hai loại dữ liệu?

Nếu ai đó có thông tin chi tiết hơn về thời điểm sử dụng NSURL thay vì NSString cho các lớp của riêng bạn xử lý đường dẫn tệp và url từ xa, vui lòng chia sẻ! Chúc mừng.

+0

Điều gì xảy ra khi tham chiếu tệp trên hệ thống tệp cục bộ? – Jason

+0

Ý của bạn là gì? 'NSURL' có [tập hợp các phương pháp mở rộng xử lý URL hệ thống tệp] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html#//apple_ref/doc/uid/20000301-SW25). – epologee

+0

Vì vậy, NSString. Có vẻ như NSURL thường được ưa thích, nhưng tôi tự hỏi liệu nó có mang đến các tệp cục bộ không. – Jason

Trả lời

3

chung cho các hoạt động liên quan đến con đường bạn nên thích NSURL qua NSString vì thông tin đường có thể được lưu trữ hiệu quả hơn trong NSURL (theo tài liệu tham khảo lớp cho NSFileManager). Vì vậy, tôi khuyên bạn nên sử dụng API của mình để sử dụng cũng NSURL.

Cũng NSURLURLByAppendingPathComponent:URLByAppendingPathExtension: rất thuận tiện được phục vụ cũng :-)

+2

+1 Ngoài ra, các quy tắc hộp cát của Cửa hàng ứng dụng Mac sắp tới yêu cầu quyền, mà (như tôi hiểu) được lưu trữ trong chính NSURL, giúp lưu trữ truy cập hệ thống tệp dễ dàng hơn để sử dụng sau này. –

8

NSUrl hiểu biết làm thế nào để xử lý hầu như bất kỳ vua của các url - không chỉ Web-adresses và chia tách nó thành dễ dàng tiếp cận khối:

  • giao thức hoặc chương trình (http, ftp, telnet, ssh)
  • tên truy cập và mật khẩu (ví dụ cho ssh: ssh: // user: [email protected])
  • máy chủ tên
  • cổng
  • đường
  • thông số GET

Bây giờ bạn có thể dễ dàng yêu cầu các url đối tượng cho khối này, trong khi ở một chuỗi có thể có nhu cầu quá mức nếu quy tắc hay phức tạp của regex.

+0

Cảm ơn bạn đã làm rõ, +1. Tôi đã phải chọn ai để đưa ra dấu ấn, và @applaudierend có tham chiếu trong đó. – epologee

Các vấn đề liên quan