【发布时间】:2011-08-27 02:56:06
【问题描述】:
我在Cocoa and Objective C: Up and Running 中读到-copy 将始终返回一个不可变对象,-mutableCopy 将始终返回一个可变对象:
重要的是要知道在可变对象上调用
-copy会返回一个不可变对象 版本。如果你想复制一个可变对象并在新版本中保持可变性, 您必须在原件上致电-mutableCopy。不过,这很有用,因为如果你想 要“冻结”一个可变对象,您只需调用-copy即可。
所以我有这样的事情:
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] init];
NSLog( @"%@", [req className] ); // NSMutableURLRequest
NSLog( @"%@", [[req copy] className] ); // NSMutableURLRequest
NSLog( @"%@", [[req mutableCopy] className] ); // NSMutableURLRequest
你不能依赖复制的结果是可变的!复制
NSMutableArray可能 返回一个NSMutableArray,因为那是原始类,但复制任意NSArray实例不会。
这似乎与NSURLRequest 有点隔离,因为NSArray 的行为符合预期:
NSArray *arr = [[NSMutableArray alloc] init];
NSLog( @"%@", [arr className] ); // __NSArrayM
NSLog( @"%@", [[arr copy] className] ); // __NSAraryI
NSLog( @"%@", [[array mutableCopy] className] ); // __NSArrayM
所以...
-
-copy何时返回不可变对象(如预期)以及何时返回可变对象? - 如何实现获取拒绝“冻结”的可变对象的“冻结”副本的预期效果?
【问题讨论】:
-
我认为您在帖子中得到了答案。
-
@Oscar A is true and B is false 并不能完全证明判断 C 是否为真的规则。
标签: objective-c cocoa mutable nsmutableurlrequest