gpt4 book ai didi

ios - 我可以在 Objective-C 的 init 中包含 NSError** 作为参数吗?

转载 作者:行者123 更新时间:2023-12-01 17:30:12 26 4
gpt4 key购买 nike

我的 iOS 应用程序从 REST 服务获取 JSON。 JSON 包含状态代码和数据。如果代码为200,则数据为请求的对象,否则数据为错误描述。

JSON 可用于构建多种对象,因此我制作了一个工厂类,在其构造函数中获取 json 数据,实例方法根据需要将数据解析为不同的对象。

我的问题是,在状态代码不是 200 的情况下,是否可以将 NSError** 作为参数包含在构造函数中。方法 header 看起来像这样:

-(instancetype) initWithData:(NSData *) json error: (NSError **) error;

最佳答案

虽然这在语法上完全没问题,但这种方法在功能方面会有问题。

问题是当初始化器调用不成功并返回nil时,对象的空间仍然被分配(然后迅速释放),因为你无法控制它。

alloc的调用
MyObj *obj = [[MyObj alloc] initWithData:data error:&err];

发生在您的代码之外。

您最好对调用者隐藏初始化程序,并公开一个类“工厂”方法,如下所示:

+(instancetype) myclassWithData:(NSData *) json error: (NSError **) error;

这样您就可以决定何时调用 alloc,因此当您确定没有要创建的对象时,就不会有无用的内存分配/释放。

关于ios - 我可以在 Objective-C 的 init 中包含 NSError** 作为参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27742201/

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