如何实现initWithCString:(const char *)nullTerminatedCString?为什么大多数人使用allocWithZone而不是alloc?

时间:2015-10-13 03:02:34

标签: ios objective-c cocoa alloc

我怀疑“如何实现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);
}

我的方式有什么问题,谁能告诉我?

1 个答案:

答案 0 :(得分:1)

That method already exists as part of the SDK on NSString,所以我不确定你为什么要实现它。话虽如此,您在上面提供的两个实现是等效的。 As noted in the documentationalloc实际上会调用allocWithZone:

The documentation for allocWithZone:也表示alloc可能是首选。它声明:

This method exists for historical reasons; memory zones are no longer used by Objective-C.