11、如何令所写的对象具有拷功能?
如果想让的类具备copy法,并返回可边类型,必须遵循nscopying协议,并
且实现
- (id)copyWithZone:(NSZone *)zone
如果让的类具备mutableCopy法,并且放回可变类型,必须遵守
NSMutableCopying,并实现- (id)mutableCopyWithZone:(nullable NSZone *)zone
注意:再此说的copy对应可边类型和mutableCopy对应可边类型法,都是遵从
系统规则已。如果你想实现的规则,也是可以的。
12、使系统的某些block api(如UIView的block版本写动画时),是否也考虑引
循环问题?
系统的某些block api中,UIView的block版本写动画时需要考虑,但也有些api
需要考虑:
所谓“引循环”是指双向的强引,所以那些“单向的强引”(block 强引 self )
没有问题,如这些:
[UIView animateWithDuration:duration animations:^{ [self.superview
layoutIfNeeded]; }];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ self.someProperty
= xyz; }];
[[NSNotificationCenter defaultCenter]
addObserverForName:@"someNotification"
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification * notification) {
self.someProperty = xyz; }];
这些情况需要考虑“引循环”。
但如果你使些参数中可能含有 ivar 的系统 api ,如 GCD 、
NSNotificationCenter就要点:如GCD 内部如果引 self,且 GCD 的
其他参数是 ivar,则要考虑到循环引:
__weak __typeof__(self) weakSelf = self;
dispatch_group_async(_operationsGroup, _operationsQueue, ^
{