此代码监视什么? ->`stack_logging_type_dealloc | stack_logging_type_alloc`

时间:2019-01-09 13:18:45

标签: ios

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

我知道按位OR |的含义。但是在腾讯图书馆中,名称为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){

}

为什么在其他情况下,如果是xxx,它将再次监视Dealooc

2 个答案:

答案 0 :(得分:1)

就我们的目的而言,假设stack_logging_type_dealloc0010b,而stack_logging_type_alloc0001b

让我们一次走一个。

type == (stack_logging_type_dealloc|stack_logging_type_alloc)

如果type的值为0011b0010b | 0001b),则此表达式为true。

type == stack_logging_type_dealloc

如果type的值为0010b,则此表达式为true。

(type & stack_logging_type_alloc) != 0

如果type的值包含0001b,则此表达式为true。例如,如果type的值为1010b,则表达式将为false。但是,如果type的值为1011b,则该表达式为true。


从逻辑上讲:

type == (stack_logging_type_dealloc|stack_logging_type_alloc)

如果type设置了标志stack_logging_type_deallocstack_logging_type_alloc,并且未设置其他标志,则为true。

type == stack_logging_type_dealloc

如果type设置了标志stack_logging_type_dealloc,并且未设置其他标志,则为true。

(type & stack_logging_type_alloc) != 0

如果type设置了标志stack_logging_type_alloc,则为true,无论在type中设置了什么其他标志。

答案 1 :(得分:0)

Swift中的管道运算符|是按位或。 More information on bitwise OR operator.

这意味着,它将一起监视情况。