iOS中位運(yùn)算詳解

本文主要講解三個(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的類型,其實(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的類型督弓,是怎樣告訴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í)別的類型:默認(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類型,為什么能枚舉出許多種類型了扇救。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刑枝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子迅腔,更是在濱河造成了極大的恐慌装畅,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钾挟,死亡現(xiàn)場(chǎng)離奇詭異洁灵,居然都是意外死亡饱岸,警方通過查閱死者的電腦和手機(jī)掺出,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苫费,“玉大人汤锨,你說我怎么就攤上這事“倏颍” “怎么了闲礼?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铐维。 經(jīng)常有香客問我柬泽,道長,這世上最難降的妖魔是什么嫁蛇? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任锨并,我火速辦了婚禮,結(jié)果婚禮上睬棚,老公的妹妹穿的比我還像新娘第煮。我一直安慰自己,他們只是感情好抑党,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布包警。 她就那樣靜靜地躺著,像睡著了一般底靠。 火紅的嫁衣襯著肌膚如雪害晦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天暑中,我揣著相機(jī)與錄音壹瘟,去河邊找鬼苟呐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛俐筋,可吹牛的內(nèi)容都是我干的牵素。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼澄者,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼笆呆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起粱挡,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤赠幕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后询筏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榕堰,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年嫌套,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逆屡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡踱讨,死狀恐怖魏蔗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痹筛,我是刑警寧澤莺治,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站帚稠,受9級(jí)特大地震影響谣旁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滋早,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一榄审、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馆衔,春花似錦瘟判、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至减细,卻和暖如春匆瓜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工驮吱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茧妒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓左冬,卻偏偏與公主長得像桐筏,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拇砰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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