2010-07-26 118 views
0

尝试将项目添加到封装在对象中的NSMutableArray时出现错误。将对象添加到NSMutableArray时出错

代码如下:

#import <Foundation/Foundation.h> 


@interface TestObject : NSObject { 
    NSMutableArray *myArray; 
} 

@property (nonatomic, retain) NSMutableArray *myArray; 


@end 

#import "TestObject.h" 


@implementation TestObject 

@synthesize myArray; 

- (id) init { 
    if(self= [super init]){ 
     // Initialise the Mutable Array 
     myArray = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 

- (void) dealloc { 
    [super dealloc]; 
    [myArray release]; 
} 
@end 

呼叫:

TestObject *testObject = [[TestObject alloc] init]; 
    NSString *someString = @"blah blah blah"; 
    NSLog(@"%@", someString); 
    [testObject.myArray addObject:someString]; 
    NSLog(@"Test Object Array Count: %@", [testObject.myArray count]); 
    [testObject release]; 

谁能告诉我为什么调用计数时,这将引发一个错误?

我也试过将可变数组复制到局部变量,并在调用局部变量时得到相同的结果。

+0

修复了我自己的问题。 NSLog(@“测试对象数组计数:%d”,[testObject.myArray count]); – 2010-07-26 22:04:25

+1

没有试图回答你的问题,但我强烈建议你在执行超级调用之前将你的-dealloc中的[myArray release]调用移到。 – Benjamin 2010-07-26 22:05:34

+0

谢谢本杰明,我的小小疏忽。我在Safari中手动输入了该代码,因为我没有在此计算机上使用xcode。 – 2010-07-26 22:17:15

回答

2

警告警告警告!!!

[super dealloc]最后件事你应该在你的-dealloc方法做,第一!

0

这是一件好事,它只是显示了一个警告,当我做了同样的事情之后,它已经崩溃了。

原因是%@是一个对象占位符。但是count方法返回的NSInteger是一个原始数据类型,其占位符是%d,正如您在注释中正确指出的那样。