位運(yùn)算在iOS中的使用

本文主要講解三個(gè)運(yùn)算符 左移(<<)延欠、與(&)、或(|) ?在iOS代碼中如何使用仙辟。


我們經(jīng)常能看到下面這樣的代碼

UIView*view = [[UIViewalloc]init];

view.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

[self.viewaddSubview:view];

意思是撑碴,自動(dòng)調(diào)整自己的寬度,保證與superView左邊和右邊的距離不變汽馋。自動(dòng)調(diào)整自己的高度,保證與superView頂部和底部的距離不變圈盔。查看autoresizingMask的類(lèi)型豹芯,其實(shí)是NSUInteger 如下

typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {

UIViewAutoresizingNone ? ? ? ? ? ? ? ? =0,

UIViewAutoresizingFlexibleLeftMargin ? =1<<0,

UIViewAutoresizingFlexibleWidth ? ? ? ?=1<<1,

UIViewAutoresizingFlexibleRightMargin ?=1<<2,

UIViewAutoresizingFlexibleTopMargin ? ?=1<<3,

UIViewAutoresizingFlexibleHeight ? ? ? =1<<4,

UIViewAutoresizingFlexibleBottomMargin =1<<5

};

那么一個(gè)NSUInteger的類(lèi)型,是怎樣告訴View驱敲,既要調(diào)整自己的寬度铁蹈,又要調(diào)整自己的高度的呢?


左移運(yùn)算符 << ? ?

公式 x << 3 就是把x的各二進(jìn)位左移3位

1<<1 ?實(shí)際就是 ?0001 << 1 ?= 0010 ? 轉(zhuǎn)成十進(jìn)制后就是 ?2

1<<4 ?實(shí)際就是 ?0001 << 4 ?= 10000 ?轉(zhuǎn)成十進(jìn)制后就是 ?16

UIViewAutoresizingFlexibleWidth ? = ?00010

UIViewAutoresizingFlexibleHeight = 10000


或運(yùn)算符 |

只要對(duì)應(yīng)的二個(gè)二進(jìn)位有一個(gè)為1時(shí)众眨,結(jié)果位就為1

00010 | 10000 ?= 10010

UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight 就是

00010 | 10000 = 10010


autoresizingMask 的結(jié)果就是二進(jìn)制數(shù) 10010握牧,我們?nèi)绾沃?是哪個(gè)選項(xiàng)被選中了?

與運(yùn)算符 &

只有對(duì)應(yīng)的二個(gè)二進(jìn)位都為1時(shí)围辙,結(jié)果位才是1

10010 & 00010 = 00010


判斷選項(xiàng)是否被選中的方法如下

if(view.autoresizingMask&UIViewAutoresizingFlexibleWidth){

?NSLog(@"UIViewAutoresizingFlexibleWidth被選中了"); //code1

}

autoresizingMask = 10010

UIViewAutoresizingFlexibleWidth ?= 00010

10010 & 00010 = 00010 等價(jià)于十進(jìn)制 2我碟,為真,所以code1被執(zhí)行姚建。

if(view.autoresizingMask&UIViewAutoresizingFlexibleHeight){

NSLog(@"UIViewAutoresizingFlexibleHeight被選中了");//code2

}

autoresizingMask = 10010

UIViewAutoresizingFlexibleWidth ?= 10000

10010 & 10000 = 10000 等價(jià)于十進(jìn)制 16矫俺,為真,所以code2被執(zhí)行掸冤。

if(view.autoresizingMask&UIViewAutoresizingFlexibleLeftMargin){

NSLog(@"UIViewAutoresizingFlexibleLeftMargin");//code3

}

autoresizingMask = 10010

UIViewAutoresizingFlexibleWidth ?= 00001

10010 & 00001 = 00000 等價(jià)于十進(jìn)制 0厘托,為假,所以code3不會(huì)被執(zhí)行稿湿。

這樣我們就知道autoresizingMask 是怎么起作用的了铅匹。


實(shí)戰(zhàn)演練:

在圖文混排時(shí),我么通常需要在一段文字中饺藤,檢測(cè)是否有網(wǎng)絡(luò)地址URL, 是否有表情符號(hào)Emoji,是否有電話號(hào)碼包斑,是否有郵箱等等流礁。

typedef NS_OPTIONS(NSUInteger, FWDetectorTypes) {

FWDetectorTypesNone=0,

FWDetectorTypesURL=1<<0, ?//1

FWDetectorTypesEmoji=1<<1, ?//2

FWDetectorTypesPhoneNumber=1<<2, ?//4

FWDetectorTypesEmail=1<<3, ?//8

};

/**

需要識(shí)別的類(lèi)型:默認(rèn)識(shí)別表情

**/

@property(nonatomic,assign)FWDetectorTypes types;

如果我們只需要識(shí)別表情

types =FWDetectorTypesEmoji;

如果我們需要同時(shí)識(shí)別表情,電話罗丰,鏈接

types =FWDetectorTypesEmoji |FWDetectorTypesURL|FWDetectorTypesPhoneNumber

內(nèi)部邏輯處理時(shí):

if(types & FWDetectorTypesURL){

//識(shí)別鏈接邏輯代碼

}

if(types & FWDetectorTypesEmoji){

//識(shí)別表情邏輯代碼

}

if(types & FWDetectorTypesPhoneNumber){

//識(shí)別電話號(hào)碼邏輯代碼

}

if(types & FWDetectorTypesEmail){

//識(shí)別郵箱邏輯代碼

}

明白三個(gè)運(yùn)算符 左移(<<)神帅、與(&)、或(|) 的運(yùn)算法則萌抵,就能理解UIView的屬性autoresizingMask

一個(gè)NSUInteger類(lèi)型找御,為什么能枚舉出許多種類(lèi)型了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绍填,一起剝皮案震驚了整個(gè)濱河市霎桅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讨永,老刑警劉巖滔驶,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異卿闹,居然都是意外死亡瓜浸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)比原,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人杠巡,你說(shuō)我怎么就攤上這事量窘。” “怎么了氢拥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蚌铜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嫩海,道長(zhǎng)冬殃,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任叁怪,我火速辦了婚禮审葬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奕谭。我一直安慰自己涣觉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布血柳。 她就那樣靜靜地躺著官册,像睡著了一般。 火紅的嫁衣襯著肌膚如雪难捌。 梳的紋絲不亂的頭發(fā)上膝宁,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天鸦难,我揣著相機(jī)與錄音,去河邊找鬼员淫。 笑死合蔽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的满粗。 我是一名探鬼主播辈末,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼映皆!你這毒婦竟也來(lái)了挤聘?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捅彻,失蹤者是張志新(化名)和其女友劉穎组去,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體步淹,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡从隆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缭裆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片键闺。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖澈驼,靈堂內(nèi)的尸體忽然破棺而出辛燥,到底是詐尸還是另有隱情,我是刑警寧澤缝其,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布挎塌,位于F島的核電站,受9級(jí)特大地震影響内边,放射性物質(zhì)發(fā)生泄漏榴都。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一漠其、第九天 我趴在偏房一處隱蔽的房頂上張望嘴高。 院中可真熱鬧,春花似錦和屎、人聲如沸阳惹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)莹汤。三九已至,卻和暖如春颠印,著一層夾襖步出監(jiān)牢的瞬間纲岭,已是汗流浹背抹竹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留止潮,地道東北人窃判。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像喇闸,于是被迫代替她去往敵國(guó)和親袄琳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容