Tôi đang cố gắng sử dụng một chuỗi riêng biệt để làm việc với một số API.iPhone: cách sử dụng performSelector: onThread: withObject: waitUntilDone: method?
Vấn đề là tôi không thể sử dụng phương pháp performSelector:onThread:withObject:waitUntilDone:
với chuỗi mà tôi đã khởi tạo cho điều này.
Mã của tôi:
@interface MyObject : NSObject {
NSThread *_myThread;
}
@property(nonatomic, retain) NSThread *myThread;
@end
@implementation MyObject
@synthesize myThread = _myThread;
- (NSThread *)myThread {
if (_myThread == nil) {
NSThread *myThreadTemp = [[NSThread alloc] init];
[myThreadTemp start];
self. myThread = myThreadTemp;
[myThreadTemp release];
}
return _myThread;
}
- (id)init {
if (self = [super init]) {
[self performSelector:@selector(privateInit:) onThread:[self myThread] withObject:nil waitUntilDone:NO];
}
return self;
}
- (void)privateInit:(id)object {
NSLog(@"MyObject - privateInit start");
}
- (void)dealloc {
[_myThread release];
_myThread = nil;
[super dealloc];
}
@end
"MyObject - privateInit start"
không bao giờ được in ra.
Tôi đang thiếu gì?
Tôi đã cố gắng thực hiện chuỗi với mục tiêu và bộ chọn, cố gắng đợi để hoàn thành quá trình thực thi phương thức (waitUntilDone:YES
).
Không có gì hữu ích.
CẬP NHẬT:
Tôi không cần đa luồng này để tách các hoạt động tốn kém cho một chuỗi khác.
Trong trường hợp này tôi có thể sử dụng số performSelectorInBackground
như đã đề cập trong một vài câu trả lời.
Lý do chính cho luồng riêng biệt này là cần phải thực hiện tất cả các hành động trong API (TTS bởi Loquendo) từ một chuỗi duy nhất.
Có nghĩa là tôi phải tạo một thể hiện của đối tượng TTS và các phương thức gọi trên đối tượng đó từ cùng một chuỗi mọi lúc.
Không tạo ra một vòng lặp vô hạn theo cách đó? Nếu runloop không có gì để làm, nó sẽ bỏ ngay lập tức và tất cả những gì bạn làm là gọi '- run' thường xuyên như bộ vi xử lý của bạn có thể xử lý. (Sử dụng CPU ở 100%) – bastibe
Vô hạn - có. Nhưng vòng lặp không lặp lại tất cả thời gian. Tôi đã đặt một dòng đăng nhập (NSLog ...) bên trong và nó được gọi chỉ một lần ... –
Đây là hành vi bất ngờ và không nên dựa vào. Một vòng lặp chạy không có nguồn đầu vào hoặc bộ hẹn giờ được định cấu hình nên thoát ngay lập tức và do đó vòng lặp của bạn sẽ chạy liên tục, lặp đi lặp lại, sử dụng CPU 100%, như áp phích cho biết. Tham khảo tài liệu nsrunloop để biết thêm thông tin. –