首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从[[class alloc] init]返回nil被认为是好习惯吗?

从[class alloc init]返回nil被认为是好习惯。这是因为在Objective-C中,当我们使用[class alloc init]来创建一个对象时,如果初始化失败,返回nil是一种常见的做法。

返回nil的好处是可以提供错误处理的机制。如果初始化失败,返回nil可以让我们在后续的代码中判断对象是否成功创建,并采取相应的处理措施,例如打印错误日志、抛出异常或者返回错误码等。

另外,返回nil也可以简化代码逻辑。在使用返回nil的方法时,我们可以直接使用条件判断来检查对象是否创建成功,而不需要额外的错误处理代码。

然而,需要注意的是,并不是所有情况下都应该返回nil。有些情况下,我们可能希望在初始化失败时抛出异常或者返回特定的错误码,这取决于具体的业务需求和设计。

总结起来,从[class alloc init]返回nil被认为是一种好习惯,它提供了错误处理的机制,并简化了代码逻辑。但在特定情况下,我们也可以选择其他的错误处理方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS有关内存管理的二三事 原

首先,在Object-C中创建对象返回的并不是对象本身,而是一个指针。...比如我们使用alloc申请空间,会经常这样做: UIImage * image = [[UIImage alloc]init]; 这里,调用的alloc时,系统将给我们创建的类分配一块内存空间,并返回一个指向这个空间的指针...调用init时对对象进行初始化。如果此时,我们将image这个指针置为nil:image=nil;那样将造成内存泄露,系统分配给image的空间永远无法回收。...为此,我们应该养成一个好习惯,不用的指针置为nil,所有对空指针进行的操作都被认为是安全的。...同样,任何不再需要这个对象的地方,也应该使它的引用计数减1,如此一来,对象内存便统一的管理了起来。

39520

《Objective-C高级编程》温故知新之自动引用计数

class_createInstance 函数的源码可以通过obj4库中的源码进行确认 源代码的函数来看,苹果的实现大概就是采用散列表(引用计数表)来管理引用计数。.../** 非ARC */ id p = [[NSObject alloc] init]; NSLog(@"class=%@", [p class]);...,你会奇怪为什么还有,这不是悬垂指针?...另外,上式虽然保证了附有__strong修饰符的id型变量初始化为nil,但并不能保证附有__strong修饰符的id指针型变量初始化为nil。...如果第二参数为0,则将变量的地址weak 表 weak 表中删除。 weak 表与引用计数表相同,作为散列表实现。如果大量使用附有 __weak 修饰符的变量,则会消耗相应的 CPU 资源。

59750

allocinit、new详解

对象只有执行了 init 方法后才能够使用. NSObject 类定义了这个初始化方法,但是 NSObject 并没有初始化什么,它直接将指针返回了....如果要自定义这个实现方法.你必须调用 super 来先初始化父类的对象.如果这个新对象不能初始化,这个方法就应该返回 nil.例如,假设有一个照相机相关的类,如果在一个没有照相机的设备上调用了这个类,...那么,在父类的 init 方法中就会返回 nil....结论: 重写 init 方法时需要先初始化父类的 init 方法. NSObject 中的 init 方法什么也没做,只是返回了自己而已. 如果初始化失败,会返回 nil. new 帮助文档: ?...首先alloc初始化了一个class结构体对象的指针,然后调用init方法完成初始化过程。 结论: new 可以看做是allocinit的组合.

88330

《Objective-C-高级编程》干货三部曲(一):引用计数篇

: id obj = [[NSObject alloc] init];//持有新生成的对象 这行代码过后,指向生成并持有[[NSObject alloc] init]的指针赋给了obj,也就是说obj...将指向某对象的指针变量设置为nil。 当程序释放对象的某个拥有者时。 collection类中删除对象时。...nil;//obj0不再强引用对象B obj2 = nil;//obj2不再强引用对象B,不再有任何强引用引用对象B,对象B废弃 而且,__strong可以使一个变量初始化为nil:id __strong...表中获取废弃对象的地址 将包含在记录中的所有附有__weak修饰符变量的地址赋值为nil weak表中删除该记录 引用计数表中删除废弃对象的地址 __autoreleasing修饰符 __autoreleasing...而关于init方法的要求则更为严格: 必须是实例方法 必须返回对象 返回对象的类型必须是id类型或方法声明类的对象类型 4.

1.7K40

iOS - 老生常谈内存管理(三):ARC 面世

id __strong strongObj = [[NSObject alloc] init]; id __weak weakObj = strongObj; 当对象dealloc时,指向该对象的...NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; id obj = [[NSObject alloc] init];...在《 MRC 说起 —— 你不持有通过引用返回的对象》章节中也说到,Cocoa 中的一些方法指定通过引用返回对象(即,它们采用ClassName **或id *类型的参数),常见的就是使用NSError...编译器处理 Cocoa 方法返回的 CF 对象 编译器知道返回Core Foundation对象的Objective-C方法遵循历史 Cocoa 命名约定。...HTPerson __weak *p = [[HTPerson alloc] init]; // 无法对 HTPerson 类的实例持有弱引用。可能是此对象过度释放,或者正在销毁。

1.9K10

IOS 某电商App签名算法解析(二) Frida RPC调用

参数类型确认 上篇文章中我们已经定位到了 +XXSignService getSignWithDic:keys:, 他有两个参数,只需要在 IDA中 查看下这个函数谁调用了,就可以看到入参的类型了。...] init]; id objc = nil; [dict setObject:objc forKey:@"objc"]; 这段代码翻译成frida的js实现如下: var param_dict =...ObjC.classes.NSMutableDictionary.alloc().init(); param_dict.setObject_forKey_(body,"body"); 那 NSArray...吾道不孤,同道还是比较多的,遇到的问题也一样,大胡子说你要在参数结尾加个 nil 但是这个nil怎么加也是个问题呀。 再搜搜 #nil# ,有个同道提供了一个方法, 搞起来。...[rc.png] 三、总结 及时保存是个好习惯。 正向编程经验对逆向工作有很大的帮助。 Frida是神器。ORZ。 [ffshow.png] 我们最先衰老的不是容颜,是梦想。

2.1K30

深入浅出iOS内存管理-技术创作101训练营

在代码中,一般使用dealloc方法来查看一个对象是否回收,如果没有回收,则有可能会造成内存泄露。如果确认一个对象已经释放,那么最后需要将他的变量手动设置为nil,否则可能会造成野指针错误。...初始化对象的 isa实例变量指向对象的类,它是一个类定义编译的运行时对象。 初始化所有其他 实例变量为零(或等效类型为零,如nil,NULL和0.0)。...但是调用alloc或者allocWithZone:返回的对象尚不可用。需要调用初始化方法,init必须初始化具有特定特征的对象并返回功能对象。...alloc只是单纯的返回一个未进行初始化的对象,并不能进行使用,需要进行init的操作;而new的本质是调用alloc并默认发送init消息,返回一个已经初始化的对象。...[1240]我们可以在objc-runtime-new.h中寻找到新的objc_class的实现[1240]但是64位以后,objc4版本对isa指针进行优化,将所有相关的方法属性都存在class_rw_t

1.3K54

你真的能写好一个单例么?

, 长的和其他类差不多, 那么会不会有某些同事"误用" [[SingletonClass alloc] init]来初始化呢?...原因是子类调用的是父类的sharedInstance方法, 直接返回父类的实例了, 子类根本没有 alloc!...大功告成~~~ 放到项目中跑起来, 貌似隐约感觉不对~~~ 有些单例中的状态怎么reset 了? 添加一些生命周期方法, 加上日志测试。。。 原来问题在-init上!...]; NSLog(@"11: %@", obj); NSLog(@"12: %@", [[SingletonClass alloc] init]); obj = nil;...alloc init必须保证“原子性”,否则在多线程情况下就会出现 ThreadA 执行完 alloc, 然后另外一个线程就有可能获取到的是这个刚 alloc 出来还没执行 init 的实例,导致意外情况

35210
领券