Objective c 内存管理ios

Objective c 内存管理ios,objective-c,ios,memory-management,Objective C,Ios,Memory Management,我来自java背景,所以我是内存管理方面的noob。我需要从NSString*str=@“hi”释放内存吗;?我确实需要释放NSString*str=[[NSString alloc init]?那么我合成的UILabel呢?caseNSString*str=@“hi”您不必释放字符串,因为它是编译时常量字符串对象(您不是所有者)。在第二种情况下NSString*str=[[NSString ALOC]init]您必须释放它,因为您是所有者,您正在分配内存,因此您是负责人 如果像retain或c

我来自java背景,所以我是内存管理方面的noob。我需要从NSString*str=@“hi”释放内存吗;?我确实需要释放NSString*str=[[NSString alloc init]?那么我合成的UILabel呢?

case
NSString*str=@“hi”
您不必释放字符串,因为它是编译时常量字符串对象(您不是所有者)。在第二种情况下
NSString*str=[[NSString ALOC]init]
您必须释放它,因为您是所有者,您正在分配内存,因此您是负责人

如果像
retain
copy
这样声明属性,则必须释放synthetic属性。通常释放属性的好站点是
dealloc
方法


你应该看看这个苹果。它有点大,但很有用;)。

现在没有必要用ARC memory management做这件事。查看链接了解更多信息,或者在谷歌上搜索“ARC memory management”

如果仍要手动管理内存,可以关闭ARC。请查看快速内存管理教程的链接


编辑:如果你不使用iOS 5,那么你必须手动管理内存。对于你的问题“我合成的那些UILabel怎么样?”如果你问如何释放它们,你只需打电话

[label release];
明智的做法是调用所有的发布声明

- (void)dealloc
例如:

- (void)dealloc {
    [label release];
    [super dealloc];
}

我合成的那些UILabel呢?ARC是一种基于编译器的内存管理策略。它与您要部署到的iOS无关,尽管我相信它确实需要4.0或更高版本的SDK。使用ARC而不是手动管理,它将解决所有这些问题。在发布之前,请尝试阅读文档或在此处搜索。此这是一个很好的问题,但Richard——这不是一个特别有用的评论。即使使用ARC,了解iOS上的内存管理是如何工作的也是非常有用的,而且ARC并没有“解决”所有问题:它只是删除了一些并引入了一些其他问题。正如其他人所说,ARC不是一颗银弹。你不会忘记您应该知道,如果您添加了自动释放,对象将在返回到主运行循环时自动释放。这免除了您手动调用释放的责任