我的代码似乎在使用C数组时泄漏,我不知道为什么。启用了ARC的泄漏
/* LeakyClass.m */
@property (nonatomic, assign) char **array1;
@property (nonatomic, assign) id __strong *array2;
@property (nonatomic, assign) unsigned short currentDictCount;
//...
- (id)initWithCapacity:(unsigned short)capacity
{
if ((self = [super init])) {
_array1 = (char **)calloc(sizeof(char*), capacity); //Leak
_array2 = (id __strong *)calloc(sizeof(id), capacity); //Leak
}
return self;
}
- (void)dealloc {
free(_array1);
free(_array2);
_array1 = NULL;
_array2 = NULL;
}
- (void)addObjectToArray2:(id)object andCharToArray1:(char *)str
{
[self array2][[self currentDictCount]] = object;
[self array1][[self currentDictCount]] = str;
[self setCurrentDictCount:[self currentDictCount] + 1];
}
@end
我称LeakyClass
与此:
/* OtherClass.m */
LeakyClass *leaky = [[LeakyClass alloc] initWithCapacity:20];
[leaky addObjectToArray2:object andCharToArray1:"1"]; // Leak
[leaky addObjectToArray2:@"example" andCharToArray1:"2"]; /Leak
[leaky addObjectToArray2:[NSURL URLWithString:exampleString] andCharToArray1:"3"]; /Leak
仪器都指向每个传递到LeakyClass
值的要添加到阵列1在这个例子中,object
,@"example"
和[NSURL URLWithString:exampleString]
。仪器也指向calloc
s为_array1
和_array2
,但我免费他们两个在dealloc
。
我错过了什么吗?
你为什么不使用'NSMutableArrays'? – Ismael
不仅如此,这看起来像是一个'NSMutableDictionary'的基本实现。你为什么这样做? – WDUK
的确,他可以使用Objective-C类,但我认为这对于初学者来说是一个很好的练习来尝试这些事情。 –