我不知道代码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
答案 0 :(得分:1)
就我们的目的而言,假设stack_logging_type_dealloc
是0010b
,而stack_logging_type_alloc
是0001b
让我们一次走一个。
type == (stack_logging_type_dealloc|stack_logging_type_alloc)
如果type
的值为0011b
(0010b | 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_dealloc
和stack_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.
这意味着,它将一起监视情况。