アプリケーション全体で必要なnsmutablearrayがあるので、アプリケーションデリゲートで宣言し、アプリケーションデリゲートのdeallocメソッドでリリースします。これがそのためのコードです。
@interface AppDelegate : UIResponder <UIApplicationDelegate>{
NSMutableArray *arr1;
IBOutlet UINavigationController *navConroller;
}
@property (strong, nonatomic) IBOutlet UIWindow *window;
@property (nonatomic, retain) UINavigationController *navConroller;
@property (nonatomic, retain) NSMutableArray *arr1;
@implementation AppDelegate
@synthesize navConroller;
@synthesize window = _window;
@synthesize arr1;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.arr1 = [[NSMutableArray alloc] init];
[self.window addSubview:navConroller.view];
[self.window makeKeyAndVisible];
return YES;
}
- (void)dealloc
{
[self.arr1 release];
[_window release];
[super dealloc];
}
メモリパフォーマンスツールを確認すると、メモリリークが表示されます。
self.arr1 = [[NSMutableArray alloc] init];
この配列をさまざまなクラスで使用しています。任意の提案をいただければ幸いです。
私はPieterGunstの回答を使用し、その場所でリークストップを行いました。しかし、それは別の場所で表示されています。ここで、jsonをペアリングし、レコードをarr1に保存します。これがそのためのコードです。
-(void) apiCall:(NSString *)para1 {
SBJSON *parser = [[SBJSON alloc] init];
para1 = [para1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
para1 = [para1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *url = [[[NSString alloc] initWithFormat:@"my api url",para1] autorelease];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
arr1 = [parser objectWithString:json_string error:nil];
[json_string release];
[parser release];
}
次の行にリークが表示されます。
arr1 = [parser objectWithString:json_string error:nil];
なにか提案を ?