我有一个NSString
财产:
.h 文件
@property (nonatomic, retain) NSString *str;
.m 文件
@synthesize str;
没有/retain count
是什么?我可以在一个方法?str
alloc
init
[str release]
我有一个NSString
财产:
.h 文件
@property (nonatomic, retain) NSString *str;
.m 文件
@synthesize str;
没有/retain count
是什么?我可以在一个方法?str
alloc
init
[str release]
我假设您对内存管理的概念不熟悉,因此我建议您在继续开发之前阅读有关内存管理的苹果文档。
基本内存管理规则
- 您拥有您创建的任何对象。
- 您可以使用保留获得对象的所有权。
- 当您不再需要它时,您必须放弃您拥有的对象的所有权。
- 您不得放弃您不拥有的对象的所有权。
我将向您推荐苹果文档中的内存管理策略,以便更好地理解内存管理
因此,当您阅读了苹果文档时,您将完全理解代码中发生的事情,但如果您不这样做,那就是错误的。您不能释放您没有所有权的对象。这违反了苹果文档中基本内存管理规则的第 4 点。要获得此对象的所有权,您必须str = [[NSString alloc] init];
在 .m 文件中执行(ARC 不需要此操作)。
不过,我的建议是阅读有关ARC的信息,这比自己处理内存管理要好得多。因为您不再需要做一些事情,例如[str release];
一旦您想放弃对象的所有权,因为它是自动完成的。
你release
不应该有一个尚未分配的对象。但是,如果您这样做,则意味着您正在向对象发送消息nil
。这是安全的,因为消息 tonil
什么都不做并返回nil
, Nil
, NULL
, 0
, or 0.0
。
是的,您可以释放此对象。每当您将alloc, copy, new, retain
这些消息中的任何一个发送到对象时。它的保留计数增加了 1。您成为该对象的所有者。因此,您必须释放对象以放弃所有权。
当您使用 ARC 时,编译器会为您执行此操作。希望能帮助到你。
您不能释放尚未分配的对象。
尽可能使用 ARC,并阅读过去 2 年对 Objective-C 的更改:不再需要在 .m 中合成在 .h 中声明的变量
作为它的一个retained
属性,你可以做self.str=nil;
而不是[str release]
安全。你不能[str release]
像我们一样release
只能做我们自己做的事情alloc
,但init
还init
没有。