2011-05-06 37 views
1

我这样的函数:大内存的问题

@property(nonatomic,retain) NSMutableArray *array; 

@synthesize array = _array; 

(NSMutableArray *) name 
{ 
    self.array = [[NSMutableArray alloc]init]; 

    [_array addObject:object]; 
    [object release]; 
    return [_array autorelase]; 
} 

中其他功能我喜欢上面的属性,名为result属性,和我做:

self.result = [... name]; 

然后在dealloc中我做

[_result release]; 

和崩溃在这一点上,我怎么能解决这个问题? 我已经尝试了很多道路,但或者它崩溃了,或者我在乐器中看到内存泄漏,我在哪里错误?

谢谢。

回答

3

虽然此代码存在很多问题,但可能导致崩溃的原因是您要在名称内部释放object而不取得它的所有权 - 除非您通过调用-alloc在该方法内创建object ,-new或-copy,该方法不拥有它,并且不负责释放它。这导致该对象在NSMutableArray内无效,因此当_result释放时,它会尝试释放无效内存和崩溃。

此外,属性不是单个函数的局部变量,它们是您正在编写这些类的类的实例的成员变量。如果你的最终目标是只返回一个自动释放阵列并将其设置为导致你可以做到以下几点:

- (NSMutableArray *) name { 
    //call a convenience method- it comes back autoreleased 
    NSMutableArray* theArray = [NSMutableArray array]; 
    [theArray addObject:object]; 
    //don't release object unless you took ownership of it in this function 
    return theArray; 
} 

那么函数外,或者调用self.result = [... name][self setResult:[... name]];

0

你有一个非常奇怪的方法定义(标题在返回类型之前应该有一个-),并且在该定义中,您正在访问一个名为object的变量,该变量似乎不存在。我不确定你想要什么,但你至少有一个内存问题。每次调用该方法时,您在name中创建的数组都会泄漏。如果添加一些细节,例如崩溃消息,则可能有人可以提供更多帮助。