gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:34:44 25 4
gpt4 key购买 nike

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

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

最佳答案

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.

关于ios - 如何实现 initWithCString :(const char *)nullTerminatedCString ? 为什么大多数人使用 allocWithZone 而不是 alloc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33093409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com