0

次の機能。「ProcessArrayForscrollView」は、url を送信して受信した JSON データを読み取ります。"urlProcess" を呼び出し、フェッチしたデータ値を NSString 形式で NSMutableArrays に格納します。

#import "SBJson.h"
#import "SBJsonStreamParser.h"

@implementation AllShowsViewController

NSURL *url = nil;
NSString * arrayDataString;
NSData *dataAllShowsView;
NSError *errorAllShowsView;
NSString *data_stringAllShowsView;
SBJsonParser *parserAllShowsView;
NSArray *data_arrayAllShowsView;
NSDictionary *itemNSDictAllShowsView;
NSMutableArray  *thumbnailImageURLAllShows;
NSMutableArray  *thumbnailShowCountAllShows;

-(void)ProcessArrayForscrollView{
    thumbnailImageURLAllShows = [[NSMutableArray alloc] init];
    thumbnailShowCountAllShows = [[NSMutableArray alloc] init];
    dataAllShowsView = [[[NSData alloc] initWithContentsOfURL:urlProcess] autorelease];
    errorAllShowsView = nil;
    data_stringAllShowsView = [[[NSString alloc] initWithData:dataAllShowsView encoding:NSUTF8StringEncoding]autorelease];
    parserAllShowsView = [[[SBJsonParser alloc] init] autorelease];
    data_arrayAllShowsView = [[[NSArray alloc] initWithArray:[parserAllShowsView objectWithString:data_stringAllShowsView error:&errorAllShowsView]] autorelease];
    for(itemNSDictAllShowsView in data_arrayAllShowsView){
         arrayDataString = [NSString stringWithFormat:@"%@",[itemNSDictAllShowsView objectForKey:@"thumbnail_small"]];    //memory leak notification here
        [thumbnailImageURLAllShows addObject: arrayDataString];  
        arrayDataString = nil;

        arrayDataString = [NSString stringWithFormat:@"%@",[itemNSDictAllShowsView objectForKey:@"showcount"]];    //memory leak notification here
        [thumbnailShowCountAllShows addObject: arrayDataString];
        arrayDataString = nil;
    }
}

-(void)dealloc{
    [super dealloc];
}

- (void)viewDidUnload{
    if(thumbnailImageURLAllShows != nil){
        [thumbnailImageURLAllShows release];
        thumbnailImageURLAllShows = nil;
    }
    if(thumbnailShowCountAllShows != nil){
        [thumbnailShowCountAllShows release];
        thumbnailShowCountAllShows = nil;
    }
    [super viewDidUnload];
}
@end

Xcode インストゥルメントを使用してメモリ リークをチェックするコードを実行したところ、2 行でリークが発生しました。このリークは、上記のviewControllerから切り替えた後に通知されます。「AllShowsViewController」を他のviewController(nibファイルを持つ)に。リークを削除する方法に関するアドバイスは本当に役に立ちます。

4

2 に答える 2

0

viewDidUnload呼ばれる保証はないと思います。コンテナ(NSMutableArrays)が正しく割り当てられていないため、文字列は正しく割り当て解除されません。クリーンアップコードをまたはに移動して、thumbnailImageURLAllShowsメモリリークthumbnailShowCountAllShowsが発生するかどうかを確認することをお勧めします。viewDidDisappeardealloc

于 2012-05-08T07:50:08.757 に答える
0

次のように、NSMutableArray のセッター/ゲッターを実装してみてください。

if (!thumbnailImageURLAllShows) {
        thumbnailImageURLAllShows = [[NSMutableArray alloc] init];
}

また、コードがクラッシュしている場所を正確に知るために、例外ブレーク ポイントを挿入します。

于 2012-08-23T04:55:31.960 に答える