Tôi đang so sánh dấu chân bộ nhớ của đại biểu vs khối trong Mục tiêu-C, để giải quyết cùng một vấn đề. Ví dụ, có một lớp người lao động thực hiện một số công việc:ObjC: sử dụng bộ nhớ của đại biểu vs khối?
// delegate
@protocol WorkerDelegate : NSObject
- (void)workHasBeenDone;
@end
// block
typedef void (^WorkerBlock)();
@interface Worker : NSObject
@property (nonatomic, weak) id<WorkerDelegate> delegate;
@property (nonatomic, copy) WorkerBlock block;
- (void)doTheWork;
@end
Mã này là tự giải thích, để biết khi nào một công việc đã được thực hiện, tôi có thể sử dụng một trong hai đại biểu hoặc khối:
@implementation MyObject
- (void)workHasBeenDone
{
[self doCleanUp];
}
- (void)entryMethod
{
Worker *worker = [Worker new];
worker.delegate = self;
// or:
worker.block = ^{[self doCleanUp];};
[worker doTheWork];
}
@end
Theo như tôi biết, trong mã trên, self
làm đại biểu, có trong bộ nhớ; Và block
được sao chép trên heap, nhưng tôi không chắc chắn, có dấu chân bộ nhớ tốt hơn?
Bây giờ tôi cần một số công nhân:
Worker *workerA = ... // created and set delegate OR block for completion notification
Worker *workerB = ... // created and set delegate OR block for completion notification
Worker *workerC = ... // created and set delegate OR block for completion notification
...
NSDictionary *workers = @{
"jobA": workerA,
"jobB": workerB,
...
};
Trong trường hợp này, khối có vẻ là sạch hơn, nhưng vẫn còn, nó có tốt hơn, tương tự hoặc tệ hơn bộ nhớ?
Cảm ơn rất nhiều!
Cách duy nhất để biết là thử và đo lường. Các chi tiết cụ thể phụ thuộc vào các chi tiết thực hiện từng cách tiếp cận để thực hiện những gì bạn muốn làm – uchuugaka