iphone новичок: не могу понять, где утечка - PullRequest
1 голос
/ 07 марта 2011

Я пытаюсь взять в руки некоторые разработки для iphone. Чтобы лучше понять вещи, я иду сначала без ИБ.

Мне удалось создать базовое приложение, отображающее некоторый текст. Ничего страшного, пока я не проверил его через инструменты. Это показывает мне некоторые утечки, и я не могу их понять.

Любая помощь по этому вопросу будет принята с благодарностью.

MyAppDelegate.h

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow            *window;
    MyViewController    *viewController;
}

@property (nonatomic, retain)  IBOutlet UIWindow *window;
@property (nonatomic, retain)  MyViewController *viewController;

@end

MyAppDelegate.m

@implementation MyAppDelegate

@synthesize window;
@synthesize viewController;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // NEXT LINE LEAKS   
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
}
- (void)dealloc {
    [viewController release];
    [window release];
    [super dealloc];
}
@end

MyViewController.h

@interface MyViewController : UIViewController {
    UILabel     *firstMessage;
}

MyViewController.m

-(void)loadView {

    // Background
    CGRect mainFrame = [[UIScreen mainScreen] applicationFrame];
    UIView *contentView = [[UIView alloc] initWithFrame:mainFrame];
    contentView.backgroundColor = [UIColor blackColor];
    self.view = contentView;
    [contentView release];

    // Add UILabel
    // NEXT LINE LEAKS   
    firstMessage = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 30)];
    firstMessage.font = [UIFont fontWithName:@"Helvetica" size:16];
    firstMessage.textColor = [UIColor whiteColor];
    firstMessage.backgroundColor = [UIColor blackColor]; 
    [self.view addSubview:firstMessage];
    [firstMessage release];
 }

-(void) viewDidLoad {
    NSString * msg;
    msg=[[NSString alloc] initWithFormat:@"stuff here"];
    firstMessage.text=msg;
    [msg release];
}

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

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Попробуйте использовать @property (nonatomic, retain) UILabel* firstMessage в своем заголовке, @synthesize firstMessage в своей реализации, а затем освободите объект firstMessage в методе dealloc.

0 голосов
/ 07 марта 2011

Старайтесь не выпускать ваше первое сообщение в loadView.Выпустите его только в методе dealloc вашего контроллера.

...