我正在接近編程在Xcode的學校項目的結束,但現在我有一個小但非常惱人的問題:內存泄漏。泄漏已被追溯到下面的代碼行:Xcode 4.2.1:NSThread導致內存泄漏,使用ARC
@autoreleasepool {
[NSThread detachNewThreadSelector:@selector(updateThread) toTarget:self withObject:nil];
}
當我評論這一點,泄漏消失了。顯然autoreleasepool出了問題:我對這些(特別是在使用ARC)方面還是有點新意,但像this one這樣的線程告訴我使用@autoreleasepool應該足夠了。
由於某些原因,我的代碼並非如此。我想我在這裏錯過了一些東西:如果有人可以就這個問題提出一些想法,那麼將非常感激。只要告訴我是否需要發佈更多的代碼,這不會是一個問題:這只是爲了提高可讀性,我試圖將其限制在主要問題上。
在此先感謝!
編輯:
謝謝你的第一反應!問題仍然存在,但是...我會多發一點代碼來澄清一些事情。該線程開始在viewDidLoad中:
/*
Everything mentioned here will be done after loading.
*/
- (void)viewDidLoad
{
// Do standard setup
[super viewDidLoad];
// Do any additional setup before loading the view from its nib.
self.title = @"Blog Manager";
// Activate edit mode
[tbvBlogList setEditing:YES animated:YES];
tbvBlogList.allowsSelectionDuringEditing = YES;
[NSThread detachNewThreadSelector:@selector(updateThread) toTarget:self withObject:nil];
UIImage *btnImage = [UIImage imageNamed:@"iPhone_General_Button_Add_Blog.png"];
UIButton *viewBtnAddBlog = [UIButton buttonWithType:UIButtonTypeCustom];
[viewBtnAddBlog setImage:btnImage forState:UIControlStateNormal];
viewBtnAddBlog.frame = CGRectMake(0, 0, 80, 36);
[viewBtnAddBlog addTarget:self action:@selector(addBlogByButton:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *btnAddBlog = [[UIBarButtonItem alloc] initWithCustomView:viewBtnAddBlog];
btnAddBlog.tintColor = [UIColor clearColor];
self.navigationItem.rightBarButtonItem = btnAddBlog;
}
然後,用於穿線其他功能:
/*
Thread to update the progress bar with.
*/
- (void)updateThread
{
@autoreleasepool {
while(YES){
[self performSelectorOnMainThread:@selector(updateProgressBar) withObject:nil waitUntilDone:false];
[NSThread sleepForTimeInterval:0.1f];
}
}
}
/*
Updates the progress bar.
*/
- (void)updateProgressBar
{
pvProgress.progress = dProgress;
}
如果它是什麼,值得一提:我使用的Xcode 4.2.1。再次感謝支持!
是的,正確的:)但你仍然可以榮幸我們的答案與1-1 upvote ... :) – 2012-01-18 16:57:02
完成,你們當之無愧:) – Tybs 2012-01-21 13:47:24
很酷,謝謝,並且很高興你終於做到了。 :) – 2012-01-21 14:02:22