2012-08-07 101 views
0

到memoryleak我使用儀器工具在我的應用程序,找出內存泄漏,但無法找出其中的實際問題和儀器工具泄漏表示在這個類泄漏。問題releted在iPhone

-(IBAction) GoToNext:(id)sender{ 


    ////NSLog(@"iPad"); 
    NextClass *sampleView = [[[NextClass alloc] init] autorelease]; 
    sampleView.ImageName = @"Tutorial.png"; 
    sampleView.modalPresentationStyle = UIModalPresentationPageSheet; 
    [sampleView setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
    [self presentModalViewController:sampleView animated:YES]; 
    sampleView.Title.text = @"On Christianity"; 
} 

NextClass.h文件

#import <UIKit/UIKit.h> 

@interface NextClass : UIViewController<UIScrollViewDelegate> { 


    IBOutlet UINavigationBar* TopNavbar; 
    IBOutlet UIScrollView *scrollView; 
    IBOutlet UILabel *Title; 
    NSString *ImageName; 

    UIImageView *imageView; 

} 

@property(nonatomic,retain) UIImageView *imageView; 
@property(nonatomic,retain) NSString *ImageName; 
@property(nonatomic,retain) IBOutlet UILabel *Title; 
@property(nonatomic,retain) IBOutlet UIScrollView *scrollView; 
@property(nonatomic,retain) IBOutlet UINavigationBar* TopNavbar; 
- (IBAction)dismissView:(id)sender; 

@end 

NextClass.m文件

#import "NextClass.h" 

    @implementation NextClass 
    @synthesize TopNavbar,scrollView,Title,ImageName,imageView; 
    CGPoint newCenter; 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 

    [super viewDidLoad]; 

    //Code for Managing Scrolling of Image.{#DR#-13/02/2012} 
    [scrollView setBackgroundColor:[UIColor whiteColor]]; 
    [scrollView setCanCancelContentTouches:NO]; 
    scrollView.clipsToBounds = YES; 
    scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    UIImage *image=[UIImage imageNamed:ImageName]; 

    imageView = [[UIImageView alloc] init]; 

    [imageView setFrame:CGRectMake(0, 0, (image.size.width),image.size.height)]; 

    [imageView setImage:image]; 

    [scrollView addSubview:imageView]; 
    [scrollView setContentSize:CGSizeMake(imageView.frame.size.width, imageView.frame.size.height)]; 
    [scrollView setScrollEnabled:YES]; 

    for(UIView *subview in [scrollView subviews]) 
    { 
     newCenter=scrollView.center; 
     newCenter=CGPointMake(scrollView.center.x, imageView.frame.size.height/2); 
     subview.center=newCenter; 
    } 

    [imageView release]; 


} 

- (IBAction)dismissView:(id)sender { 
    [self dismissModalViewControllerAnimated:YES]; 
} 



- (void)viewDidUnload { 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
    self.TopNavbar =nil; 
    self.scrollView=nil; 
    self.Title=nil; 

} 


- (void)dealloc { 

    if (ImageName) { 
     [ImageName release]; 
     ImageName=nil; 
    } 
    if (Title) { 
     [Title release]; 
     Title=nil; 
    } 
    if (scrollView) { 
     [scrollView release]; 
     scrollView=nil; 
    } 
    if (TopNavbar) { 
     [TopNavbar release]; 
     TopNavbar=nil; 
    } 

    [super dealloc]; 
} 

@end 

Xcode中產生以下泄漏,但我不能找出實際的問題在我的代碼的儀器工具。

Leaked Object # Address Size Responsible Library Responsible Frame 
GeneralBlock-48 7 <multiple> 336 libsystem_c.dylib strdup 
GeneralBlock-48  0x360c140 48 libsystem_c.dylib strdup 
GeneralBlock-48  0x360a060 48 libsystem_c.dylib strdup 
GeneralBlock-48  0x1b79e0 48 libsystem_c.dylib strdup 
GeneralBlock-48  0x1b79e0 48 libsystem_c.dylib strdup 
GeneralBlock-48  0x1ad910 48 libsystem_c.dylib strdup 
GeneralBlock-48  0x14e5a0 48 libsystem_c.dylib strdup 
GeneralBlock-48  0x14e5a0 48 libsystem_c.dylib strdup 

感謝

+0

代替的ImageView = [[UIImageView的頁頭] INIT]!使用self.imageView = [[UIImageView alloc] init];因爲你已經保留了它。 – 2012-08-07 10:13:04

+0

我沒有看到任何明顯的。你可以嘗試改變一行到'@property(nonatomic,copy)NSString * ImageName;'看看它是否有幫助,但我不相信它應該。 – 2012-08-07 11:42:13

+0

對不起,你的建議不起作用。 – 2012-08-07 13:09:55

回答

0

你永遠不會釋放財產 「ImageView的」。你的問題就是爲什麼ARC被髮明(和我們都有過類似的問題) - 你應該儘快可以和永不回頭切換)

+0

我想我看到一個版本來平衡分配。 (雖然如果人們在定義屬性後使用了屬性,它會更好。) – 2012-08-07 14:35:28