有没有办法监视 Objective C 中的方法以查看它何时完成?这是我无权访问的 SDK 方法。
4 回答
一般来说,没有。
“监视”某些类型的操作的能力有时会随着一些委托协议弹出,这些委托协议可能具有委托回调WillFoo
的DidFoo
类型。
您正在描述面向方面编程 (AOP)的案例研究,这是面向对象编程的替代和扩展概念。
Objective-C 或底层 C 不提供此功能 - 但是有可能通过运行时操作将其部分添加到 Objective-C/Cocoa,例如方法调配。
在 github 上教授 Objective-C AOP 有多种尝试,但您必须自己测试它们,我从未使用过。
- https://github.com/moszi/AOP-in-Objective-C
- https://github.com/tomdalling/AspectObjectiveC
- https://github.com/ndcube/AOP-for-Objective-C
就我个人而言,我在 NSObject 上使用普通方法 swizzeling 来记录它的 dealloc 调用一次。如果对象属于某个子类,它就非常方便,因为我只记录了它。
我找到了一篇博客文章,它准确地展示了如何使用 NSInvocations:Aspect Oriented Programming in Objective-C
编码
NSMutableArray* testArray = (NSMutableArray *)[[AOPProxy alloc] initWithNewInstanceOfClass:[NSMutableArray class]];
[(AOPProxy*)testArray interceptMethodEndForSelector:@selector(removeObjectAtIndex:)
withInterceptorTarget:self
interceptorSelector:@selector( removeInterceptor: )];
removeInterceptor:
将在结束时调用该方法removeObjectAtIndex:
听起来答案是否定的。一点谷歌搜索发现这个:
离线保存对象
大多数保存功能会立即执行,并在保存完成时通知您的应用。如果您不需要知道保存何时完成,则可以使用 saveEventually 代替。优点是如果用户当前没有网络连接,saveEventually 会将更新存储在设备上,直到重新建立网络连接。如果您的应用在连接恢复之前关闭,Parse 将在下次打开应用时重试。
从该文本中,听起来解析 API 包含此保存方法的变体,这些变体具有回调。