3

我观看了 Instruments 入门,在那里他们展示了Signposts的用法。该示例是用Swift编写的,但我想在我的Objective-C项目中使用它们。

在这些示例中,路标开始和结束设置在函数内,这意味着它们将被相应地触发。我的项目是一个插件,它的结构不同,我只有一个被调用一次的“主”函数,然后我使用自定义类中的一系列方法来加载和解析不同类型的数据。因为它都是连续的......我可以只有一个os_log_tand并用+os_signpost_id_t一遍又一遍地重新利用它吗?或者这是不安全的,因为该方法可以在触发后返回?或者如果他们这么快就被打了很多次电话,他们会不会发生冲突?os_signpost_interval_beginos_signpost_interval_endend

谢谢。

// Initialize
os_log_t log = os_log_create("com.example.plugin", OS_LOG_CATEGORY_POINTS_OF_INTEREST);
os_signpost_id_t spid = os_signpost_id_generate(log);

// Measurement 1 
os_signpost_interval_begin(log, spid, "testMethodA started");
[MyClass testMethodA:arg1 withOptions:arg2];
os_signpost_interval_end(log, spid, "testMethodA finished");

// Measurement 2
os_signpost_interval_begin(log, spid, "testMethodB started");
[MyClass testMethodB:arg1 withOptions:arg2];
os_signpost_interval_end(log, spid, "testMethodB finished");

[...]
4

1 回答 1

4

好的,我发现了问题。我使用的是不同nameos_signpost_interval_beginos_signpost_interval_end因此它没有被结束而只是开始。

代码应如下所示:

// Measurement 1 
os_signpost_interval_begin(log, spid, "testMethodA");
[MyClass testMethodA:arg1 withOptions:arg2];
os_signpost_interval_end(log, spid, "testMethodA");
于 2020-07-02T13:25:36.723 回答