22: 理解NSCopying协议

2017-04-10  本文已影响50人  KKLinJJ

1.NSCopying协议

若想令自定义对象具有拷贝功能,则需要实现NSCopying协议

<pre><code>//.h</code>
<code>@interface Person : NSObject <NSCopying></code>
<code> @property (nonatomic,copy) NSString *name;</code>
<code> @property (nonatomic,readonly) NSArray *friends;</code>
<code> @property (nonatomic,assign) int age;</code>
<code> - (instancetype)initWithName:(NSString *)name age:(int)age;</code>
<code>@end</code>
<code>//.m</code>
<code>@interface Person ()</code>
<code> @property (nonatomic,readwrite,strong) NSMutableArray *friends;</code>
<code>@end</code>
<code>@implementation Person</code>
<code> - (instancetype)initWithName:(NSString *)name age:(int)age</code>
<code> {</code>
<code> self = [super init];</code>
<code> if (self) {</code>
<code> self.name = name;</code>
<code> self.age = age;</code>
<code> _friends = [NSMutableArray array];</code>
<code> }</code>
<code> return self;</code>
<code>}</code>
<code>... </code>
<code>- (id)copyWithZone:(NSZone *)zone{</code>
<code> Person *p = [[[self class] allocWithZone:zone] initWithName:_name age:_age];</code>
<code> return p;</code>
<code>}</code>
<code>@end</code></pre>

<pre><code> //.h</code>
<code> @interface Person : NSObject <NSCopying></code>
<code> @property (nonatomic,copy) NSString *name;</code>
<code> @property (nonatomic,readonly) NSArray *friends</code>
<code> @property (nonatomic,assign) int age;</code>
<code> - (instancetype)initWithName:(NSString *)name age:(int)age;</code>
<code> @end</code>
<code> //.m</code>
<code> @interface Person ()</code>
<code> @property (nonatomic,readwrite,strong) NSMutableArray *friends;</code>
<code> @end</code>
<code> @implementation Person</code>
<code> - (instancetype)initWithName:(NSString *)name age:(int)age</code>
<code> {</code>
<code> self = [super init];</code>
<code> if (self) {</code>
<code> self.name = name;</code>
<code> self.age = age;</code>
<code> _friends = [NSMutableArray array];</code>
<code> }</code>
<code> return self;</code>
<code> }</code>
<code> ... </code>
<code> - (id)copyWithZone:(NSZone *)zone{</code>
<code> Person *p = [[[self class] allocWithZone:zone] </code><code>initWithName:_name age:_age];</code>
<code> p->_friends = [_friends mutableCopy]; //额外的代码</code>

<code> return p;</code>
<code> }</code>
<code>@end</code></pre>

Paste_Image.png
上一篇 下一篇

猜你喜欢

热点阅读