我可以在Objective-C中查看appendFormat实例方法的实现吗?

我可以在Objective-C中查看appendFormat实例方法的实现吗?,objective-c,cocoa,Objective C,Cocoa,我想看看如何在Objective-C中实现appendFormat: -(void)appendFormat:(NSString*)格式。。。; 有没有办法看到实施情况 我发现: -(void)appendFormat:(NSString*)格式,。。。{ NSString*字符串; NSRange range={[self length],0}; va_列表参数; va_开始(参数、格式); string=NSAutorelease(NSStringNewWithFormat(forma

我想看看如何在Objective-C中实现
appendFormat

-(void)appendFormat:(NSString*)格式。。。;
有没有办法看到实施情况

我发现:

-(void)appendFormat:(NSString*)格式,。。。{
NSString*字符串;
NSRange range={[self length],0};
va_列表参数;
va_开始(参数、格式);
string=NSAutorelease(NSStringNewWithFormat(format,nil,arguments,NULL));
va_end(参数);
[self-ReplaceCharactersRange:range with string:string];
}
但我不确定它是否和可可一样

我希望看到实现,以便确认运行时。由于
appendFormat
是用于可变字符串的,所以我假设
appendFormat
的运行时是最坏情况O(n)和摊销O(1),但我不确定


(我不是Objective-C开发人员。)

你看不到
-[NSMutableString appendFormat::][/code>的源代码,因为它在苹果之外是不可用的

您可以拆卸基础框架来查看实现。我做到了(使用Hopper),实现基本上是这样的:

- (void) appendFormat:(NSString *)format, ... {
    va_list ap;
    va_start(ap, format);
    NSString *string = [[NSString allocWithZone:nil] initWithFormat:format locale:nil arguments:ap];
    [self replaceCharactersInRange:NSMakeRange(self.length, 0) withString:string];
    va_end(ap);
}
如果查看
initWithFormat:locale:arguments:
的反汇编,可以看到它调用
\u cfStringCreateWithFormat和argumentSaux2
。这方面的源代码(来自macOS 10.10.5)是可用的。最终,您会发现自己位于同一个文件中的
\ucfstringappendformatcore
。此函数用于解释格式字符串


您必须反汇编CoreFoundation才能找到
replaceCharactersRange:withString:
的实现。它只调用
\ucfstringcheckandreplace
,它在我上面链接的同一个CoreFoundation源文件中定义。您可以从中深入研究,最终发现当CoreFoundation需要扩展为字符串分配的存储时,每次都会这样做,其系数为3/2。这是指数增长,因此在
replaceCharactersInRange:htString:
中花费的总时间为O(n)。

您无法看到源代码,因为它在Apple之外不可用

您可以拆卸基础框架来查看实现。我做到了(使用Hopper),实现基本上是这样的:

- (void) appendFormat:(NSString *)format, ... {
    va_list ap;
    va_start(ap, format);
    NSString *string = [[NSString allocWithZone:nil] initWithFormat:format locale:nil arguments:ap];
    [self replaceCharactersInRange:NSMakeRange(self.length, 0) withString:string];
    va_end(ap);
}
如果查看
initWithFormat:locale:arguments:
的反汇编,可以看到它调用
\u cfStringCreateWithFormat和argumentSaux2
。这方面的源代码(来自macOS 10.10.5)是可用的。最终,您会发现自己位于同一个文件中的
\ucfstringappendformatcore
。此函数用于解释格式字符串

您必须反汇编CoreFoundation才能找到
replaceCharactersRange:withString:
的实现。它只调用
\ucfstringcheckandreplace
,它在我上面链接的同一个CoreFoundation源文件中定义。您可以从那里深入研究,最终发现当CoreFoundation需要扩展为字符串分配的存储时,它每次都会扩展3/2倍。这是指数增长,因此在
replaceCharactersRange:withString:
中花费的总时间为O(n)