Nếu bạn muốn trả lại một giá trị, sau đó trả lại giá trị. Vượt qua tham chiếu trong Cocoa/iOS được giới hạn phần lớn là NSError**
.
Given:
+(void)fileName:(NSString *) file
Sau đó làm:
+(NSString *) fileName;
Và được thực hiện với nó.
Nếu bạn cần trả lại nhiều hơn một giá trị tại một thời điểm, điều đó đòi hỏi một cấu trúc hoặc, thường xuyên hơn, một lớp học.
Trong mục tiêu-C, chuyển qua các mùi tham chiếu như bạn đang làm sai.
đèo bằng cách tham khảo trong Objective-C được dành chủ yếu cho trở NSError*
thông tin về một thất bại thu hồi, nơi mà các giá trị trả về của phương pháp riêng của mình chỉ ra hay không nhiệm vụ yêu cầu thành công hay thất bại (bạn có thể vượt qua NULL
như đối số NSError**
để cho phép phương pháp tối ưu hóa việc tạo siêu dữ liệu lỗi đã nói).
Vượt qua tham chiếu cũng được sử dụng để truy xuất trạng thái bên trong của các đối tượng trong đó giá trị trả lại thực sự là một giá trị đa. I E. các phương thức từ AppKit như sau. Trong những trường hợp này, đối số truyền qua tham chiếu thường là tùy chọn hoặc hoạt động như các giá trị trả về thứ cấp.
Chúng được sử dụng khá ít trên API. Có chắc chắn sử dụng để vượt qua bằng cách tham khảo, nhưng - như đã nói ở trên - làm như vậy nên được khá hiếm và hiếm vẫn còn trong mã ứng dụng. Trong nhiều trường hợp - và trong một số trường hợp dưới đây, có khả năng - một mô hình tốt hơn là tạo một lớp có thể đóng gói trạng thái và sau đó trả về một thể hiện của lớp đã nói thay vì truyền tham chiếu.
NSWorkspace.h:- (BOOL)getInfoForFile:(NSString *)fullPath application:(NSString **)appName type:(NSString **)type;
NSTextView.h:- (void)smartInsertForString:(NSString *)pasteString replacingRange:(NSRange)charRangeToReplace beforeString:(NSString **)beforeString afterString:(NSString **)afterString;
NSAttributedString.h:- (BOOL)readFromURL:(NSURL *)url options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict;
NSNib.h:- (BOOL)instantiateWithOwner:(id)owner topLevelObjects:(NSArray **)topLevelObjects NS_AVAILABLE_MAC(10_8);
NSSpellChecker.h:- (NSRange)checkGrammarOfString:(NSString *)stringToCheck startingAt:(NSInteger)startingOffset language:(NSString *)language wrap:(BOOL)wrapFlag inSpellDocumentWithTag:(NSInteger)tag details:(NSArray **)details NS_AVAILABLE_MAC(10_5);
+1 Cuộc gọi phương thức sau đó sẽ phải được thay đổi thành [function fileName: & file] –
@bbum: Tham số * có thể * là tham số vào/ra, nhưng ngay cả sau đó. . . – dreamlax