初始化NSString对象两次是否有任何隐藏的副作用



如果我们初始化NSString对象两次,那么是否存在任何问题或副作用?

NSString *str = [[NSString alloc] init];
str = [str init];

在已初始化的对象上调用init是未定义的行为。来自ARC文档:

程序在同一对象上对init方法进行两次或两次以上调用是未定义的行为,但每个init方法调用最多可以执行一次委托init调用。

您所做的操作可能会使程序崩溃或导致数据损坏。不要这么做。

;init";方法需要一个通过将所有成员设置为0或nil而初始化的对象,而不需要其他值。就像[SomeClass alloc]的结果一样。

调用init两次会产生各种恶劣的副作用。例如,如果第一个init分配了内存,那么第二个init很可能会导致内存泄漏。更糟糕的事情可能会发生。如果你现在没有看到任何糟糕的事情发生,你可以打赌在下一个MacOS或iOS版本中会发生一些糟糕的事情。

相关内容

最新更新