W.K*_*K.S 1 json objective-c ios nsjsonserialization
我的iOS应用程序从REST服务获取JSON.JSON包含状态代码和数据.如果代码是200,则数据是请求的对象,否则数据是错误描述.
JSON可用于构建多种对象,因此我创建了一个工厂类,它在构造函数中获取json数据,实例方法根据需要将数据解析为不同的对象.
我的问题是,如果状态代码不是200,可以在构造函数中包含NSError**作为参数.方法头看起来像这样:
-(instancetype) initWithData:(NSData *) json error: (NSError **) error;
Run Code Online (Sandbox Code Playgroud)
虽然这在语法上是完全可行的,但这种方法在功能方面会有问题.
问题是,当初始化程序的调用不成功并nil返回时,仍然会分配对象的空间(然后立即释放),因为您无法控制它.的通话alloc中
MyObj *obj = [[MyObj alloc] initWithData:data error:&err];
Run Code Online (Sandbox Code Playgroud)
发生在您的代码之外.
最好从调用者隐藏初始化程序,并公开类"工厂"方法,如下所示:
+(instancetype) myclassWithData:(NSData *) json error: (NSError **) error;
Run Code Online (Sandbox Code Playgroud)
这样您就可以决定何时调用alloc,因此当您确定没有要创建的对象时,就不会有无用的内存分配/释放.
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |