将对象添加到NSMutableArray时出错
问题描述:
尝试将项目添加到封装在对象中的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];
谁能告诉我为什么调用计数时,这将引发一个错误?
我也试过将可变数组复制到局部变量,并在调用局部变量时得到相同的结果。
答
警告警告警告!!!
[super dealloc]
是最后件事你应该在你的-dealloc
方法做,不第一!
答
这是一件好事,它只是显示了一个警告,当我做了同样的事情之后,它已经崩溃了。
原因是%@是一个对象占位符。但是count方法返回的NSInteger是一个原始数据类型,其占位符是%d,正如您在注释中正确指出的那样。
修复了我自己的问题。 NSLog(@“测试对象数组计数:%d”,[testObject.myArray count]); – 2010-07-26 22:04:25
没有试图回答你的问题,但我强烈建议你在执行超级调用之前将你的-dealloc中的[myArray release]调用移到。 – Benjamin 2010-07-26 22:05:34
谢谢本杰明,我的小小疏忽。我在Safari中手动输入了该代码,因为我没有在此计算机上使用xcode。 – 2010-07-26 22:17:15