2013-09-05 47 views

Trả lời

3

Như mệnh của Apple doc NSInvocationOperationNSBlockOperation Cả hai đều là lớp con của NSOperation

NSInvocationOperation Class

Lớp NSInvocationOperation là một lớp con cụ thể của NSOperation quản lý việc thực hiện một nhiệm vụ đóng gói đơn quy định như một sự thỉnh nguyện. Bạn có thể sử dụng lớp này để khởi tạo một hoạt động bao gồm việc gọi một bộ chọn trên một đối tượng được chỉ định. Lớp này thực hiện một hoạt động không đồng thời


NSBlockOperation Class

Lớp NSBlockOperation là một lớp con cụ thể của NSOperation quản lý việc thực hiện đồng thời của một hoặc nhiều khối. Bạn có thể sử dụng đối tượng này để thực hiện một số khối cùng một lúc mà không phải tạo các đối tượng hoạt động riêng biệt cho từng đối tượng. Khi thực hiện nhiều hơn một khối, bản thân hoạt động được coi là đã hoàn thành chỉ khi tất cả các khối đã thực hiện xong.

Các khối được thêm vào hoạt động khối được gửi đi với ưu tiên mặc định cho hàng đợi công việc phù hợp. Bản thân các khối không nên đưa ra bất kỳ giả định nào về cấu hình môi trường thực thi của chúng.

3

NSOperation là lớp cơ sở. Tất cả các hoạt động mở rộng NSOperation. Nhưng nó là một lớp trừu tượng, có nghĩa là bạn cần phải phân lớp nó và triển khai mã thực hiện hoạt động thực tế.

Đối với các trường hợp đơn giản, việc này (tạo lớp con của riêng bạn) là không cần thiết, tuy nhiên.

Nếu bạn chỉ muốn chuyển thư đến một đối tượng, bạn có thể sử dụng NSInvocationOperation. Đây là một triển khai thực hiện NSOperation có thể được tham số hóa với một bộ chọn và một đối tượng đích.

Nếu bạn chỉ muốn gọi thêm một khối nữa, bạn có thể sử dụng NSBlockOperation. Đây là một thực hiện của NSOperation có thể được tham số hóa với một khối để gọi.

27

NSBlockOperation phát hành một khối. NSInvocationOperation thực thi một số NSInvocation (hoặc một phương thức được xác định bởi đích, bộ chọn, đối tượng). NSOperation phải được phân lớp, nó cung cấp sự linh hoạt nhất nhưng yêu cầu nhiều mã nhất.

NSBlockOperation and NSInvocationOperation là cả hai lớp con của NSOperation. Chúng được cung cấp bởi hệ thống, do đó bạn không phải tạo một lớp con mới cho các tác vụ đơn giản.

Sử dụng NSBlockOperation và NSInvocationOperation phải đủ cho hầu hết các tác vụ.


Dưới đây là một ví dụ mã cho việc sử dụng cả ba mà thực hiện chính xác những điều tương tự:

// For NSOperation subclass 
@interface SayHelloOperation : NSOperation 
@end 

@implementation SayHelloOperation 

- (void)main { 
    NSLog(@"Hello World"); 
} 

@end 

// For NSInvocationOperation 
- (void)sayHello { 
    NSLog(@"Hello World"); 
} 


- (void)startBlocks { 
    NSBlockOperation *blockOP = [NSBlockOperation blockOperationWithBlock:^{ 
     NSLog(@"Hello World"); 
    }]; 
    NSInvocationOperation *invocationOP = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(sayHello) object:nil]; 
    SayHelloOperation *operation = [[SayHelloOperation alloc] init]; 

    NSOperationQueue *q = [[NSOperationQueue alloc] init]; 
    [q addOperation:blockOP]; 
    [q addOperation:invocationOP]; 
    [q addOperation:operation]; 
} 
+1

Nó sẽ tốt hơn nếu bạn sử dụng văn bản khác nhau trong mỗi hoạt động để tách chúng ra khỏi nhau thay vì "Hello World" nhiều lần. Chỉ là một gợi ý – c0d3Junk13

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