我怀疑“如何实现initWithCString:(const char *)nullTerminatedCString”。
我搜索了这个问题的很多答案。他们中的大多数使用allocWithZone而不是alloc,但据我所知,由于某种原因,NSZone被苹果抛弃了。 大多数人编写代码来实现这种方法:
+ (id) stringWithCString: (const char*)nullTerminatedCString
encoding: (NSStringEncoding)encoding
{
NSString *obj;
obj = [self allocWithZone: NSDefaultMallocZone()];
obj = [obj initWithCString: nullTerminatedCString encoding: encoding];
return AUTORELEASE(obj);
}
我不明白他们为什么不这样写:
+ (id) stringWithCString: (const char*)nullTerminatedCString
encoding: (NSStringEncoding)encoding
{
NSString *obj;
obj = [self alloc];
obj = [obj initWithCString: nullTerminatedCString encoding: encoding];
return AUTORELEASE(obj);
}
我的方式有什么问题,谁能告诉我?
答案 0 :(得分:1)
That method already exists as part of the SDK on NSString,所以我不确定你为什么要实现它。话虽如此,您在上面提供的两个实现是等效的。 As noted in the documentation,alloc
实际上会调用allocWithZone:
。
The documentation for allocWithZone:
也表示alloc
可能是首选。它声明:
This method exists for historical reasons; memory zones are no longer used by Objective-C.