我正在比較Objective-C中委託與塊的內存佔用情況,以解決同樣的問題。例如,有一個工人階級誰做了一些工作:ObjC:委託vs塊的內存使用情況?
// 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
的代碼是不言自明,爲了知道什麼時候工作已經完成,我可以使用委託或塊:
@implementation MyObject
- (void)workHasBeenDone
{
[self doCleanUp];
}
- (void)entryMethod
{
Worker *worker = [Worker new];
worker.delegate = self;
// or:
worker.block = ^{[self doCleanUp];};
[worker doTheWork];
}
@end
據我所知,在上面的代碼中,self
作爲委託,在內存中; block
被複制到堆上,但我不確定,哪個具有更好的內存佔用?
現在我需要的工人數量:
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,
...
};
在這種情況下,塊似乎是清潔的,但儘管如此,它有更好的,相同或更糟糕的內存佔用?
非常感謝!
要知道的唯一方法就是嘗試它並進行測量。具體細節取決於實施每種方法的細節來做你想做的事 – uchuugaka 2014-11-07 00:04:22