2009-05-29 38 views
6

Có chủ đề nào trong Mục tiêu C không? Nếu vậy, chúng được khai báo và sử dụng như thế nào?Luồng trong Mục tiêu-C

Nếu có ai biết về đa luồng trong Mục tiêu C, vui lòng chia sẻ với tôi.

Cảm ơn và kính trọng.

Trả lời

9

Nếu bạn đang phát triển bằng cách sử dụng Cocoa (ví dụ cho mac hoặc iphone), bạn có quyền truy cập vào lớp NSThread, có thể được sử dụng để đa luồng. Googling cho NSThread sẽ tìm thấy bạn API.

Bạn có thể khai báo nó như sử dụng:

NSThread *mythread = [[NSThread alloc] initWithTarget:target selector:selector object:argument]; 

đâu mục tiêu và chọn là đối tượng và chọn bạn muốn bắt đầu một chủ đề với, và đối số là một cuộc tranh cãi để gửi đến bộ chọn.

Sau đó, sử dụng [bắt đầu huyền thoại] để bắt đầu.

18

Một cách dễ dàng để chỉ cần tắt một phương pháp trong một chủ đề mới là sử dụng.

+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument trên NSThread. Nếu bạn không chạy rác thu thập, bạn cần phải thiết lập hồ bơi tự động của riêng bạn.

Một cách dễ dàng khác nếu bạn không muốn chặn chuỗi chính là sử dụng.

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg trên NSObject

Tùy thuộc vào loại đồng thời bạn là sau khi bạn cũng nên có một cái nhìn tại NSOperation có thể cung cấp cho bạn khóa miễn phí để bạn có thể chia sẻ nó giữa một số chủ đề trong số những thứ khác.

3

Bạn cũng có thể nhìn vào NSOperation

Để xem một ví dụ về điều này, có một cái nhìn tại bưu Drew McCormack về MacResearch.

+0

NSOperation chỉ hỗ trợ iOS 4.0 trở lên. –

2

Trước khi đi xa với những thứ như detachNewThreadSelector: hãy nhớ xem tài liệu chính thức của Apple. Để có tổng quan cấp cao về các tùy chọn (bao gồm hàng đợi hoạt động, hàng đợi công văn, và như vậy), có Concurrency Programming Guide. Và, để xem luồng thấp hơn (và ít được đề xuất hơn), có Threading Programming Guide.

Bạn chắc chắn không muốn chỉ bắt đầu xoay vòng chủ đề mà không đọc những gì Apple đã nói về chủ đề đầu tiên. Họ đã làm rất nhiều công việc với các công cụ như GCD để làm cho nó dễ dàng hơn và an toàn hơn để viết các chương trình đồng thời.

5

Có có khái niệm luồng trong Objective C. và có nhiều cách để đạt được đa luồng trong mục tiêu C.

1>NSThread

[NSThread detachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:self withObject:nil]; 

này sẽ tạo ra một chủ đề mới trong lý lịch. từ chủ đề chính của bạn.

2>Dùng performSelector

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 

sẽ thực hiện nhiệm vụ giao diện người dùng trên thread chính của bạn nếu bạn gọi này từ sợi nền ... Bạn cũng có thể sử dụng

[self performSelectorInBackground:@selector(abc:) withObject:obj]; 

nào sẽ tạo ra một chủ đề nền.

3>Sử dụng NSOperation

Follow this link

4>Sử dụng GCD

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     [self callWebService]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self updateUI]; 
     }); 
    }); 

Will callWebService trong sợi nền và khi nó đã được hoàn thành. Nó sẽ updateUI trong chủ đề chính. More about GCD

Đây gần như là tất cả các cách đa luồng được sử dụng trong iOS. hi vọng điêu nay co ich.