猫猫学iOS之|(或)的理解,哪些地方的枚举能直接用|(或)连接判断

猫猫分享,必须精品

原创文章,欢迎转载。转载请注明:翟乃玉的博客
地址:http://www.jianshu.com/notebooks/4236923/latest

一:问题来源

最早时候,猫在学习通知时候(是系统通知不是NSNotificationCenter)用到一种很奇特的写法:

    //注册通知
    if ([UIDevice currentDevice].systemVersion.doubleValue<8.0) {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];
    }
    else {
        [[UIApplication sharedApplication] registerForRemoteNotifications];
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil]];
    }

这里在判断系统盘本后的设置中,我们用到了|符号来做连接。


111.png

这里用或符号,可以实现多选的效果,于是猫猫就像,我去,好牛逼,然后在有一次设置图片的时候,猫猫想让一张图片既要自动填充又要自动。。。说的好晕,就是想设置view的contentMode可以用两个枚举,比如UIViewContentModeTop | UIViewContentModeScaleAspectFill这样写。
然后猫就发现,猫天真了,真的没用。

二:解决

其实当时的问题并没有解决,只是说猫搞明白了为何用有的地方用或可以,而有的地方就不能用或。

1:发现

  • 首先我们进入UIViewContentMode的代码当中。

    Snip20160627_7.png

    这里可以看到,不能用或连接的定义的枚举是这样的。

  • 然后我们进入UIUserNotificationType的代码当中。

    Snip20160627_8.png

    可以用或来连接的枚举是这样的,用1 << 0 (位运算左移来定义的)

2:猜测

于是很容易,猫猜测肯定跟这个枚举的定义是否用左移来定义有关系,经过测试,所有的枚举 << 定义的都可以用 | 来连接,做判断,其他的都不行,只能一个一个的。

3:验证

  • 定义以下代码:
int a = 1 << 0; // 1 0001
int b = 1 << 1; // 2 0010
int c = 1 << 2; // 4 0100
int d = 1 << 3; // 8 1000

void content(int value)
{
    if (value & a) NSLog(@"value里面有a");
    if (value & b) NSLog(@"value里面有b");
    if (value & c) NSLog(@"value里面有c");
    if (value & d) NSLog(@"value里面有d");
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        content(a | b | c | d);
   }
    return 0;
}
  • 运行结果:
Snip20160627_15.png
  • 解析
    其实iOS底层就是这么做的,原理八九不离十,主要运用了 & 和 | 的运算符的特性:
    *** | 或 : 只要有1个是1, 结果就是1***
    *** & 与 : 只有2个都是1, 结果才是1***
    以及:
    *** 1 << n == 2的n次方***

然后可知,当我们用左移来定义时候,可以得到:
int a = 1 << 0 = 1 = 0001
int b = 1 << 1 = 2 = 0010
int c = 1 << 2 = 4 = 0100
int d = 1 << 3 = 8 = 1000
然后可以看出,abcd分别代表二进制的某一位是1,而进行&运算,就能得到了。

  • 重点:
    与和或就记住下面的就行了,实在不行就用系统自带的计算器吧。
    *** | 或 : 只要有1个是1, 结果就是1***
    *** & 与 : 只有2个都是1, 结果才是1***
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,946评论 6 13
  • 今天,我去游泳了。我又教会了一个朋友游泳,这一次用的时间更短,她学会游泳时非常高兴,因为她高兴我也感觉到非常快乐。...
    了凡耕读阅读 277评论 0 1
  • 很奇怪,宿舍六个妹子,有三个人大学都上了一半了,至今未脱过一次单,当然其中包括我。 你说丑吗? 单看外貌的话,我不...
    张希希啊阅读 2,620评论 65 22
  • 当网络红人这个词刚刚进入人们视野时,芙蓉姐姐和凤姐先后以出位的言行吸引了大众注意。前一个扭着夸张的S型,以“我最美...
    斯坦威阅读 190评论 1 0
  • 日光之必要 果腹之必要 微笑之必要 有趣的灵魂之必要 音乐之必要 旅行之必要 洒脱的酣畅之必要 云卷云舒之必要 狂...
    洛熙_阅读 166评论 0 0