我是ObjectiveC语言的新手。 我无法理解内存管理语法。 我的代码如下:
NSDate* someDate;
someDate=[[NSDate alloc] init];
loop
{
someDate=[[NSDate alloc] init];
}
我会在这里发生内存泄漏吗?或者返回的NSDate对象是[autorelease]?
由于
答案 0 :(得分:5)
正如@DavidKanarek所说,你会有泄密。
有多种方法可以解决这些问题:
NSDate* someDate;
someDate=[NSDate date];
loop
{
someDate=[NSDate date];
}
或
NSDate* someDate=nil;
someDate=[[NSDate alloc] init];
loop
{
[someDate release];
someDate=[[NSDate alloc] init];
}
[someDate release];
第一个是更容易阅读的代码,但第二个代码可以尽可能降低内存使用率。如果你的循环不是太大,请使用第一个。如果你经历了数千次循环,我会使用第二次。
萨姆
答案 1 :(得分:4)
你会有很多内存泄漏。如果对象在名称中具有new,alloc或copy的方法返回,则它们最初会保留(不是自动释放)。 [NSDate date]
将被自动释放。如果您发布更实质性的代码,我可以帮助您完全实现目标。
答案 2 :(得分:1)
此对象所有权方案是通过引用计数系统实现的,该系统内部跟踪每个对象拥有的所有者数量。当您声明对象的所有权时,您会增加它的引用计数,并且当您完成对象时,您会减少其引用计数。当它的引用计数大于零时,保证存在一个对象,但是一旦计数达到零,就允许操作系统销毁它。
http://rypress.com/tutorials/objective-c/memory-management
但是在最新的xcode中,它提供了ARC(自动引用计数) 因此它将自动管理引用计数。当类被释放时,它释放内容中的所有对象的内存。
答案 3 :(得分:0)
你会有很多内存泄漏。
someDate
是一个poninter变量,并为您分配了一个内存块,在本例中为[[NSDate alloc] init]
。
但是,在循环中,您将指针变量分配给另一个内存bolck(someDate=[NSDate date]
)
由于已分配的内存块未释放,因此发生内存泄漏。