objective-c - 在启用 ARC 的项目中使用 alloc、init

标签 objective-c ios automatic-ref-counting init alloc

实际上,我正在开发一个启用了 ARC 的项目。我知道使用 allocinit 是获取对象的 ownership。我知道,如果我创建这样的字符串

NSString *myString = [[NSString alloc]initWithFormat:@"Something"];

然后我需要释放我自己的myString如果我使用启用了 ARC 会怎样?我不能释放自己。那么它会造成泄漏吗?或者我不应该像这样创建对象?

我也可以像下面的代码一样创建一个字符串。

NSString *myString = [NSString stringWithFormat:@"Something"];

但是对于支持 ARC 的项目我需要使用哪种类型呢?如果我使用第一种类型会怎样?

最佳答案

如果您使用 ARC,所有必要的 release 调用都会在您编译时为您添加。它不会泄漏。

两者的区别

NSString *myString = [[NSString alloc]initWithFormat:@"Something"];

NSString *myString = [NSString stringWithFormat:@"Something"];

是第一个会在该 block 中最后一次引用 myString 后自动释放,而第二个是自动释放的实例,只会在运行循环结束时释放。差别不大,但如果您使用大量对象,请尽量避免使用自动释放的对象以保持较低的内存使用率。

关于objective-c - 在启用 ARC 的项目中使用 alloc、init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13495464/

相关文章:

objective-c - CATransaction 之后在 ios6 上重复调用 layoutSubviews

ios - Swift,从字符串中获取变量名

ios - 消除移动 Safari textarea 小部件中的自动缩放?

ios - observeValueForKeyPath : message sent to deallocated instance

ios - 为什么 Obj-C 实例有 1 个保留计数刚创建?

objective-c - Cocoa - 将 IBOutlet 链接到单独的 Nib

ios - 在 NSDictionary 中设置值时 @"1.5"和 @(1.5) 有什么区别?

ios - 将 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 缓冲区转换为 RGB 缓冲区会创建蓝色图片

ios - 如何知道用户在推送通知中点击了 "Don' t 允许”

iOS ARC : unexpected 'dealloc' call