1

有没有办法监视 Objective C 中的方法以查看它何时完成?这是我无权访问的 SDK 方法。

4

4 回答 4

1

一般来说,没有。

“监视”某些类型的操作的能力有时会随着一些委托协议弹出,这些委托协议可能具有委托回调WillFooDidFoo类型。

于 2012-06-06T21:54:36.520 回答
1

您正在描述面向方面编程 (AOP)的案例研究,这是面向对象编程的替代和扩展概念。

Objective-C 或底层 C 不提供此功能 - 但是有可能通过运行时操作将其部分添加到 Objective-C/Cocoa,例如方法调配。

在 github 上教授 Objective-C AOP 有多种尝试,但您必须自己测试它们,我从未使用过。

就我个人而言,我在 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:

于 2012-06-06T21:58:01.177 回答
0

不用于代码,不。

有一些分析技术可以为您执行此操作,例如DTrace(可以在 Instruments 中使用),但这对您的代码没有帮助。您可以 调整方法,但如果您不确定自己在做什么,那么您真的非常不应该这样做。

于 2012-06-06T21:58:30.757 回答
0

听起来答案是否定的。一点谷歌搜索发现这个:

离线保存对象

大多数保存功能会立即执行,并在保存完成时通知您的应用。如果您不需要知道保存何时完成,则可以使用 saveEventually 代替。优点是如果用户当前没有网络连接,saveEventually 会将更新存储在设备上,直到重新建立网络连接。如果您的应用在连接恢复之前关闭,Parse 将在下次打开应用时重试。

从该文本中,听起来解析 API 包含此保存方法的变体,这些变体具有回调。

于 2012-06-07T02:54:43.843 回答