我正在比较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