2012-09-21 41 views
8

Tôi chỉ đọc một số mã nguồn của https://github.com/MugunthKumar/MKNetworkKit, và thấy điều này[tự tự] có nghĩa là gì trong mục tiêu c?

+(void) initialize { 

    if(!_sharedNetworkQueue) { 
    static dispatch_once_t oncePredicate; 
    dispatch_once(&oncePredicate, ^{ 
     _sharedNetworkQueue = [[NSOperationQueue alloc] init]; 
     [_sharedNetworkQueue addObserver:[self self] forKeyPath:@"operationCount" options:0 context:NULL]; 
     [_sharedNetworkQueue setMaxConcurrentOperationCount:6]; 

    }); 
    }    
} 

gì mà [tự tự] có nghĩa là ở đây?

+1

Đoán đầu tiên của tôi là nó trỏ đến lớp meta của bản thân. Có lẽ ai đó có thể xác nhận nếu điều này là đúng? Thông tin thêm về các lớp meta của ObjC tại đây: http://cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html Cũng đọc phần sau: http://www.sealiesoftware.com /blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html ('Objective-C sử dụng metaclasses cho các mục tiêu thực tế như các phương thức lớp, nhưng nếu không có xu hướng ẩn các metaclasses. Ví dụ, [lớp NSObject] giống hệt với [NSObject self]') –

+2

@WolfgangSchreurs: Không. – Jesper

Trả lời

10

-self là phương thức defined in the NSObjectprotocol. Nó trả về người nhận, tức là đối tượng bạn gửi tin nhắn self đến. Nếu bạn làm [a self], bạn nhận được a quay lại và có, nếu bạn làm [self self] (hoặc self.self), bạn thực sự nhận được self quay lại.

Nó có thể hữu ích trong các đường dẫn khóa-giá trị, nơi bạn có nghĩa vụ nối thêm một thành phần mới, nhưng có ý định quan sát toàn bộ đối tượng, như trong Cocoa Bindings. Tôi không thấy bất kỳ ứng dụng nào trong mã này mà bạn đã đăng, nhưng có thể là trường hợp proxy sử dụng self khác nhau, để trỏ tới chính proxy, thay vì đối tượng từ xa/được chuyển tiếp.

8

Nó giống như self, chỉ một cuộc gọi dự phòng.

[self self] // ---> Same object of self 
Các vấn đề liên quan