2011-06-30 16 views
9

Chúng dường như thực hiện một nhiệm vụ tương tự hợp lý: khởi chạy một chuỗi mới thực hiện bộ chọn đó một cách nhanh chóng và dễ dàng. Nhưng có sự khác biệt nào không? Có thể liên quan đến quản lý bộ nhớ?Sự khác nhau giữa + [NSThread detachNewThreadSelector: toTarget: withObject:] và - [NSObject performSelectorInBackground: withObject:]?

+1

Câu hỏi hay. Tôi sẽ nói rằng 'perfomSelectorInBackground' có thể tái sử dụng một luồng từ một nhóm (thông qua' libdispatch'), nhưng các tài liệu nói rõ ràng rằng nó sẽ tạo một luồng mới. Vì vậy, yeah, nó dường như làm chính xác những điều tương tự như phương pháp 'NSThread' ... –

Trả lời

4

Cả hai đều giống nhau.

Trong iOS và Mac OS X v10.5 trở lên, tất cả các đối tượng đều có khả năng sinh ra một chuỗi mới và sử dụng nó để thực thi một trong các phương thức của chúng. Phương thức performSelectorInBackground: withObject: tạo ra một luồng tách mới và sử dụng phương thức được chỉ định làm điểm vào cho chuỗi mới. Ví dụ, nếu bạn có một số đối tượng (được đại diện bởi biến myObj) và đối tượng đó có một phương thức được gọi là doSomething mà bạn muốn chạy trong một chuỗi nền, bạn có thể sử dụng mã sau đây để làm điều đó:

[myObj performSelectorInBackground:@selector(doSomething) withObject:nil]; 

Hiệu quả của việc gọi phương thức này giống như khi bạn gọi phương thức newThreadSelector: toTarget: withObject: của NSThread với đối tượng hiện tại, bộ chọn và đối tượng tham số làm tham số. Chủ đề mới được sinh ra ngay lập tức bằng cách sử dụng cấu hình mặc định và bắt đầu chạy. Bên trong bộ chọn, bạn phải cấu hình chủ đề giống như bất kỳ chuỗi nào. Ví dụ: bạn cần phải thiết lập một nhóm tự động trả lời (nếu bạn không sử dụng bộ sưu tập rác) và định cấu hình vòng lặp chạy của chuỗi nếu bạn dự định sử dụng nó. Để biết thông tin về cách định cấu hình chủ đề mới

0

Tôi giả sử chúng giống nhau, như - (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg; được định nghĩa trong NSThread.h trong danh mục NSObject (NSThreadPerformAdditions). Đó là không có gì kết luận, nhưng đó là bằng chứng theo hướng đó.

+0

Tôi chỉ làm một thử nghiệm, không ai thiết lập một hồ bơi autorelease cho bạn. –

Các vấn đề liên quan