2010-07-05 57 views
0

你需要发布一些非常简单的东西吗?objective-c内存管理问题

NSString *a = @"Hello"; 

//[a release]; ? 

我来自一个Java/C#世界,感到困惑的事情时,应该释放/保留...

+0

我认为这是一个重复的问题。看到这里:http://stackoverflow.com/questions/2888217/static-nsstrings-in-objective-c/2888231#2888231 – harms 2010-07-05 21:30:48

回答

1

不,你不需要释放一个常量NSString,尽管如果你这样做不会引起任何问题。常量字符串是内存管理系统的特例。由于它们的内容在编译时已知,因此它在应用程序二进制文件中是静态定义的,所以它在运行时永远不必分配或释放。出于这个原因,它的保留和释放方法是noops。

这仅适用于常量NSStrings(以@开头的字符串)及其免费桥接表亲,常量CFStrings(使用CFSTR()宏定义))。

2

号只需release对象,你init/alloc自己或您的实例变量在你的类dealloc方法中。

+0

合成的IB属性呢? – Yaso 2010-07-05 21:46:58

+0

取决于它们的对象类型,例如NSString是,NSInteger没有。但正如我上面所说的,这些将以你的'dealloc'方法进行。 – 2010-07-06 02:19:59

+0

您需要在dealloc中释放所有IB属性,并且您的对象已保留的所有属性都与对象类型无关。你不释放NSInteger的唯一原因是它不是一个对象,它是一个标量。另一方面,你会释放一个NSNumber。 – 2010-07-06 03:32:39