Я приближаюсь к концу школьного проекта с программированием в Xcode, но сейчас у меня небольшая, но крайне неприятная проблема: утечка памяти. Утечка была прослежена вплоть до следующей строки кода:Xcode 4.2.1: NSThread, вызывающий утечку памяти, используя ARC
@autoreleasepool {
[NSThread detachNewThreadSelector:@selector(updateThread) toTarget:self withObject:nil];
}
Когда я комментирую это, утечка исчезла. По-видимому, в autoreleasepool что-то пошло не так: я все еще немного новичок в этом (особенно при использовании ARC), но такие темы, как this one, дали мне понять, что использование @autoreleasepool должно быть достаточным.
По какой-то причине это не касается моего кода. Наверное, я что-то пропустил: если кто-то может дать некоторые идеи о том, что может быть проблемой, тогда это будет высоко оценено. Просто скажите мне, нужно ли мне отправлять больше кода, это не будет проблемой: это просто для читаемости вопроса, который я пытаюсь ограничить его основной проблемой.
Заранее спасибо!
EDIT:
Спасибо за первые ответы! Однако проблема все еще сохраняется ... Я отправлю еще немного кода, чтобы немного разобраться. Нить запускается в 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 ... :) –
Готово, вы, парни, заслужили это :) – Tybs
Прохладный, спасибо и рад, что вам это удалось. :) –