C 配列を使用するとコードがリークするようですが、その理由がわかりません。
/* 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
計器は、配列 1 に追加するために渡された各値を指していLeakyClass
ます。この例ではobject
、@"example"
と[NSURL URLWithString:exampleString]
. Instruments も と の s を指していますcalloc
が、 で両方を解放します。_array1
_array2
dealloc
何か不足していますか?