for
ループの各反復でオブジェクトを作成します。ただし、dealloc関数が呼び出されることはありません。各イテレーションでリリースされることは想定されていませんか?ARCを使用していて、NSZombiesを非アクティブ化しています。循環参照も表示されません。xcodeからメモリリークインスツルメントを実行してもリークは表示されませんが、クラスのポインタメモリが解放されることはなく、dealloc
呼び出しが行われることもありません。なぜこれが起こる可能性があるのか考えていますか?
ありがとうございました!
for(int i=0; i<10; i++)
{
//calculate the hog features of the image
HogFeature *hogFeature = [self.image obtainHogFeatures];
if(i==0) self.imageFeatures = (double *) malloc(hogFeature.totalNumberOfFeatures*sizeof(double));
//copy the features
for(int j=0; j<hogFeature.totalNumberOfFeatures; j++)
self.imageFeatures[i*hogFeature.totalNumberOfFeatures + j] = hogFeature.features[j];
}
クラス宣言は次のHogFeature
ようになります。
@interface HogFeature : NSObject
@property int totalNumberOfFeatures;
@property double *features; //pointer to the features
@property int *dimensionOfHogFeatures; //pointer with the dimensions of the features
@end
および実装:
@implementation HogFeature
@synthesize totalNumberOfFeatures = _totalNumberOfFeatures;
@synthesize features = _features;
@synthesize dimensionOfHogFeatures = _dimensionOfHogFeatures;
- (void) dealloc
{
free(self.features);
free(self.dimensionOfHogFeatures);
NSLog(@"HOG Deallocation!");
}
@end
最後に、カテゴリobtainHogFeatures
内への呼び出しUIImage
は次のようになります。
- (HogFeature *) obtainHogFeatures
{
HogFeature *hog = [[HogFeature alloc] init];
[...]
return hog;
}