如果你想返回一个值,然后返回值。 Cocoa/iOS中的引用传递大部分限于NSError**
。
考虑:
+(void)fileName:(NSString *) file
然后做:
+(NSString *) fileName;
,并用它来完成。
如果您需要一次返回多个值,那么需要一个结构或更经常的一个类。
在Objective-C中,通过引用来传递气味,就像你做错了一样。
路过在Objective-C基准返回有关恢复故障,该方法的返回值本身就说明所请求的任务是否成功或失败的NSError*
信息在很大程度上保留(你可以通过NULL
为参数NSError**
允许该方法优化去创建所述错误元数据)。
传递引用也用于检索返回值实际上是一个多值的对象的内部状态。即来自AppKit的方法如下。在这些情况下,传递引用参数通常是可选的或者作为次要返回值。
它们在整个API中使用的比较少。通过引用传递肯定是有用的,但是 - 如上所述 - 在应用程序代码中这样做应该是非常罕见且罕见的。在很多情况下(以及下面的一些情况),可能的更好的模式是创建一个可以封装状态的类,然后返回所述类的实例而不是通过引用传递。
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方法调用必须改为[function fileName:&file] – 2010-07-26 02:01:54
@bbum:参数*可能*是一个输入/输出参数,但即使如此。 。 。 – dreamlax 2010-07-26 03:42:47