#objective-c #cocoa-touch #exc-bad-access #autorelease
#objective-c #cocoa-touch #исключение — плохой доступ #авторелиз
Вопрос:
У меня есть простой UIViewControler, и когда я вызываю метод [self performSelectorInBackground:@selector (загрузить) с помощью object:nil]; это вызывает и EXC_BAD_ACCESS
Вот UIViewControler.m и UIViewControler.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (strong, nonatomic) UITextView *myTextView;
@end
#import "ViewController.h"
@implementation ViewController
@synthesize myTextView;
- (id)init {
self = [super init];
if (self) {
myTextView = [[UITextView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[[self view] addSubview:myTextView];
[self performSelectorInBackground:@selector(load) withObject:nil];
}
return self;
}
- (void) load {
@autoreleasepool {
[myTextView setText:@"LOADING ..."];
//DO SOMETHING ....
}
}
@end
PS.:
В проекте используется Objective-C ARC
Комментарии:
1. Какова трассировка стека для сбоя?
Ответ №1:
Объекты UIKit не являются потокобезопасными: вы должны обращаться к ним только в основном потоке. Строка [myTextView setText:@"LOADING ..."];
не может быть безопасно выполнена в фоновом потоке.
Это может быть или не быть причиной, по которой вы получаете EXC_BAD_ACCESS
сообщение об ошибке, но, не видя остальной части load
метода, я не могу узнать, что еще может быть неправильным.