静态对象内存释放

Posted

技术标签:

【中文标题】静态对象内存释放【英文标题】:static object memory release 【发布时间】:2010-07-10 09:11:05 【问题描述】:

我的任务是

-(ABC*)createInstance

  Static ABC *obj = [[alloc ABC] init];

  if(obj == nil)
  
    obj = [[alloc ABC] init];
  
  return obj

我们可以用客观 c 写吗

[[ABC createInstance] release]

【问题讨论】:

您的代码没有意义,无法编译。 你想用代码实现什么? 【参考方案1】:

是的,如果您没有覆盖 retain/release,用户可以释放您的实例。查看common singleton patterns 以获得更好的方法。

注意事项:

[ClassName alloc],不是[alloc ClassName] 如果您打算将createInstance 设为类方法,请使用+ (ABC*)createInstance;static,不是Static 你必须将obj初始化为nil 如果子类化是一个问题,请使用self 而不是ABC[self alloc] 这些方法的通用名称是sharedInstance

【讨论】:

我要补充: 1. 您必须用 nil 初始化静态存储变量(非基元不起作用)。 2.你应该使用self而不是ABC进行分配(用于子类化)。 3.访问器命名为sharedInstance(常用objc风格)。 @Nik:很好的补充,但 1. 仅适用于文件范围变量。 1.哦,很好,我没有意识到这种差异。 2. 应该是[self alloc],因为它是一个类方法(当然)。 @Nik:没关系 1.,这是我的 C 与 C++ 混淆之一:/ 是的,在查看open-std.org/JTC1/SC22/WG14/www/docs/n1336.pdf(并使用gcc进行测试)后,我发现函数本地范围内的静态存储持续时间变量只能用整数值初始化。

以上是关于静态对象内存释放的主要内容,如果未能解决你的问题,请参考以下文章

java中的内存一般分成几部分?

内存释放

Java 内存泄露总结

Java把内存划分为4个部分 1. 代码区 1栈区 3堆区 4静态区域

析构函数为啥能释放对象内存?

C++1y 内存管理中的大小释放功能