首页 > 解决方案 > 这是什么代码监控?-> `stack_logging_type_dealloc|stack_logging_type_alloc`

问题描述

我不知道代码的含义是什么。type == (stack_logging_type_dealloc|stack_logging_type_alloc)它是否监视分配?还是dealloc?或其他?代码来源:https ://opensource.apple.com/source/Libc/Libc-583/gen/stack_logging.c.auto.html

我知道按位或的意思|。但是在腾讯库中名为OOMDeteotor(https://github.com/Tencent/OOMDetector)。其中有这样的代码:

if (type == (stack_logging_type_dealloc|stack_logging_type_alloc)) {

}else if (type == stack_logging_type_dealloc) {

}else if((type & stack_logging_type_alloc) != 0){

}

为什么在else if xxx中,它再次监控dealooc

标签: ios

解决方案


为了我们的目的,让我们说stack_logging_type_dealloc0010bstack_logging_type_alloc0001b

让我们一次一个。

type == (stack_logging_type_dealloc|stack_logging_type_alloc)

type如果具有值0011b( 0010b | 0001b),则此表达式为真。

type == stack_logging_type_dealloc

如果type具有值,则此表达式为真0010b

(type & stack_logging_type_alloc) != 0

type如果值包含 ,则此表达式为真0001b。例如,如果type有 value 1010b,那么表达式将为 false。但是,如果type有 value 1011b,则表达式为真。


从逻辑上看:

type == (stack_logging_type_dealloc|stack_logging_type_alloc)

如果type有标志stack_logging_type_deallocstack_logging_type_alloc设置,并且没有设置其他标志,则为真。

type == stack_logging_type_dealloc

如果设置type了标志stack_logging_type_dealloc,并且没有设置其他标志,则为真。

(type & stack_logging_type_alloc) != 0

如果设置type了标志stack_logging_type_alloc,则为真,无论在type.


推荐阅读