班级的儿童为家长。 父母执行C议定书,其中规定了任择方法,包括<代码>-(撤销)d。 儿童是否实施了<条码>-d;它是否应当援引<条码>。
换言之,如果并且只有某种情况会对其作出反应,那么我写了什么法典来援引[super d]
? 假定我不控制父母的履行;它可能随时改变。
Here are all the ways I have thought of. I am currently using number 4.
www.un.org/Depts/DGACM/index_spanish.htm 明显可见的答复1:
[super d]; // Delete this line if a runtime exception occurs when you try it
This does not work because Parent might implement -d dynamically so this works when you test it and not in the field. Or the implementation of Parent could change so that the result of this test is no longer correct.
www.un.org/Depts/DGACM/index_spanish.htm 明显可见的答复2:
if ([super respondsToSelector:_cmd])
[super d];
这并不奏效,因为国家统计局的目标在于执行——答复。 ToSelector将发现儿童的执行情况,并在一切情况下将YES送回。
www.un.org/Depts/DGACM/index_spanish.htm 明显可见的答复:
if ([[self superclass] instancesRespondToSelector:_cmd])
[super d];
只有当超级阶级知道它总是执行——d 时,才进行这项工作;如果能够动态地确定这一方法是否存在的话,这种技术就不会奏效。 更不用说,它将在管理时间对父母的执行进行静态改变。
Apparently sensible answer 4:
@try
{
[super d];
}
@catch (NSException *exception)
{
NSString *templateReason = [NSString stringWithFormat:
@"-[%@ %@]: unrecognized selector sent to instance %p"
,NSStringFromClass([self superclass])
,NSStringFromSelector(_cmd)
,self];
if (![exception.reason isEqualToString:templateReason])
@throw exception;
}
如果不存在超级舱内的方法,这种性能就会很差,因为计算模板Reason,然后将其与例外理由进行比较,费用昂贵。
这一机制很脆弱,因为本案中说明的例外理由的形式可能会在未来的SDK或临时释放中得到改变。