iOS 基本知識小結(jié)

synthesize有什么作用?
當(dāng)定義了一系列的變量時,需要寫很多的getter和setter方法,而且它們的形式都是差不多的,所以Xcode提供了@property和@synthesize屬性,property用在 .h 頭文件中用作聲明桥滨,@synthesize用在.m 文件中用于實(shí)現(xiàn)。
在X-code4.5以前弛车,在.h中聲明完屬性之后齐媒,如:@property(nonatomic,assign) int age;
@property(nonatomic帅韧,assign) NSString *name;
需要在.m中寫上@synthesize int age;
@synthesize NSString *name;
系統(tǒng)會自動去實(shí)現(xiàn)setter和getter方法
而在X-code4.5之后里初,@synthesize就不需要再寫了,系統(tǒng)會直接去實(shí)現(xiàn)setter和getter方法忽舟。另外双妨,聲明完property屬性之后,會自動生成下劃線叮阅,如_age刁品、_name;如果不想要下劃線浩姥,那么就可以使用@synthesize去修飾挑随,例如,在.m中寫@synthesize age勒叠;那么_age就會變成age

2兜挨、NSString什么時候用copy,什么時候用strong
比如:
@property (retain,nonatomic) NSString *rStr;
@property (copy, nonatomic) NSString *cStr;

  • (void)test:
    {
    NSMutableString *mStr = [NSMutableStringstringWithFormat:@"abc"];
    self.rStr = mStr;
    self.cStr = mStr;
    NSLog(@"mStr:%p,%p", mStr,&mStr);
    NSLog(@"retainStr:%p,%p", _rStr, &_rStr);
    NSLog(@"copyStr:%p,%p", _cStr, &_cStr);

    假如眯分,mStr對象的地址為0x11拌汇,也就是0x11是@“abc”的首地址,mStr變量自身在內(nèi)存中的地址為0x123弊决;
    當(dāng)把mStr賦值給retain的rStr時噪舀,rStr對象的地址為0x11魁淳,rStr變量自身在內(nèi)存中的地址為0x124;rStr與mStr指向同樣的地址与倡,他們指向的是同一個對象@“abc”界逛,這個對象的地址為0x11,所以他們的值是一樣的纺座。
    當(dāng)把mStr賦值給copy的cStr時息拜,cStr對象的地址為0x22,cStr變量自身在內(nèi)存中的地址0x125比驻;cStr與mStr指向的地址是不一樣的该溯,他們指向的是不同的對象,所以copy是深復(fù)制别惦,一個新的對象,這個對象的地址為0x22夫椭,值為@“abc”掸掸。

如果現(xiàn)在改變mStr的值:
[mStr appendString:@"de"];
NSLog(@"retainStr:%@", _rStr);
NSLog(@"copyStr:%@", _cStr);

結(jié)果,
使用retain的字串rStr的值:@"abcde",
而使用copy的字串cStr的值:@"abc",
所以蹭秋,如果一般情況下扰付,我們都不希望字串的值跟著mStr變化,所以我們一般用copy來設(shè)置string的屬性仁讨。
如果希望字串的值跟著賦值的字串的值變化羽莺,可以使用strong,retain洞豁。
注意:上面的情況是針對于當(dāng)把NSMutableString賦值給NSString的時候盐固,才會有不同,如果是賦值是NSString對象丈挟,那么使用copy還是strong刁卜,結(jié)果都是一樣的,因?yàn)镹SString對象根本就不能改變自身的值曙咽,他是不可變的蛔趴。

把一個對象賦值給一個屬性變量,當(dāng)這個對象變化了例朱,如果希望屬性變量變化就使用strong屬性孝情,如果希望屬性變量不跟著變化,就是用copy屬性洒嗤。

由此可以看出:
對源頭是NSMutableString的字符串箫荡,retain僅僅是指針引用,增加了引用計數(shù)器烁竭,這樣源頭改變的時候菲茬,用這種retain方式聲明的變量(無論被賦值的變量是可變的還是不可變的),它也會跟著改變;而copy聲明的變量,它不會跟著源頭改變婉弹,它實(shí)際上是深拷貝睬魂。
對源頭是NSString的字符串,無論是retain聲明的變量還是copy聲明的變量镀赌,當(dāng)?shù)诙卧搭^的字符串重新指向其它的地方的時候氯哮,它還是指向原來的最初的那個位置,也就是說其實(shí)二者都是指針引用商佛,也就是淺拷貝喉钢。
另外說明一下,這兩者對內(nèi)存計數(shù)的影響都是一樣的良姆,都會增加內(nèi)存引用計數(shù)肠虽,都需要在最后的時候做處理。
其實(shí)說白了玛追,對字符串為啥要用這兩種方式税课?我覺得還是一個安全問題,比如聲明的一個NSString *str變量痊剖,然后把一個NSMutableString *mStr變量的賦值給它了韩玩,如果要求str跟著mStr變化,那么就用retain;如果str不能跟著mStr一起變化陆馁,那就用copy找颓。而對于要把NSString類型的字符串賦值給str,那兩都沒啥區(qū)別叮贩。不會影響安全性击狮,內(nèi)存管理也一樣

3.weak和assign有什么區(qū)別?
區(qū)別:
weak 只可以修飾對象妇汗。如果修飾基本數(shù)據(jù)類型帘不,編譯器會報錯
assign 可修飾對象,和基本數(shù)據(jù)類型杨箭。當(dāng)需要修飾類型時寞焙,MRC 時使用 unsafe_unretained。當(dāng)然互婿,unsafe_unretained 也可能產(chǎn)生野指針捣郊,所以它名字是“unsafe_”.

weak 不會產(chǎn)生野指針問題。因?yàn)閣eak修飾的對象釋放后引用計數(shù)值為0慈参,指針會自動被置 nil呛牲,之后再向該對象發(fā)消息也不會崩潰。weak 是安全的
assign 如果修飾對象驮配,會產(chǎn)生野指針問題娘扩;如果修飾基本數(shù)據(jù)類型是安全的着茸。修飾的對象釋放后,指針不會自動被置空琐旁,此時向?qū)ο蟀l(fā)消息會崩潰涮阔。

相同:都可以修飾對象類型,但是 assign 修飾對象會存在問題灰殴。
總結(jié):assign 適用基本數(shù)據(jù)類型敬特,不適用于引用類型。因?yàn)橹殿愋蜁环湃霔V形眨裱冗M(jìn)后出原則伟阔,由系統(tǒng)負(fù)責(zé)管理?xiàng)?nèi)存。而引用類型會被放入堆中掰伸,需要我們自己手動管理內(nèi)存或通過ARC管理
weak 適用 delegate 和 block 等引用類型皱炉,不會導(dǎo)致野指針問題,也不會循環(huán)引用碱工,非常安全

4.c 語言里的數(shù)組與 OC 數(shù)組的區(qū)別
OC 數(shù)組是一個對象娃承,有大量的方法,c 沒有都需要自己寫
c 數(shù)組刪除是需要后面往前移動怕篷,OC 數(shù)組自動處理

5.詳解枚舉 NS_OPTIONS 與 NS_ENUM的區(qū)別與格式
在蘋果的一篇官方文檔
《Adopting Modern Objective-C》 “適應(yīng)現(xiàn)代的 Objective-c” 中提及到使用 NS_ENUM 和 NS_OPTIONS 來聲明枚舉
NS_ENUM 用來聲明基于一般整形的枚舉,而 NS_OPTIONS 一般用來聲明基于位掩碼的聲明(bitmask)

NS_OPTIONS
typedef NS_OPTIONS(NSUInteger,UISwipeGestureRecognizerDirection){
UISwipeGestureRecognizerDirectionNone = 0,
UISwipeGestureRecognizerDirectionRight = 1 << 0,
UISwipeGestureRecognizerDirectionLeft = 1 << 1,
UISwipeGestureRecognizerDirectionUp = 1 << 2,
UISwipeGestureRecognizerDirectionUp = 1 << 2,
}
小括號中第一個為 NSUInteger 這個為固定值酗昼,第二個為枚舉類型廊谓,自己定義,大括號中枚舉基必須全部包含小括號的枚舉類型麻削,定義位移枚舉蒸痹,
UISwipeGestureRecognizer *swipeGR = [UISwipeGestureRecognizer alloc] init];
swipeGR.direction = UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionLef;

typedef NS_ENUM(NSInteger,NSWritingDirection){
NSWritingDirectionNatural = -1,
NSWritingDirectionLeftToRight = 0,
NSWritingDirectionRightToLeft = 1,
}
小括號中第一個為 NSInteger 這個為固定值,定義通用枚舉

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呛哟,一起剝皮案震驚了整個濱河市叠荠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扫责,老刑警劉巖榛鼎,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鳖孤,居然都是意外死亡者娱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門苏揣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黄鳍,“玉大人,你說我怎么就攤上這事平匈】蚬担” “怎么了藏古?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忍燥。 經(jīng)常有香客問我拧晕,道長,這世上最難降的妖魔是什么灾前? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任防症,我火速辦了婚禮,結(jié)果婚禮上哎甲,老公的妹妹穿的比我還像新娘蔫敲。我一直安慰自己,他們只是感情好炭玫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布奈嘿。 她就那樣靜靜地躺著,像睡著了一般吞加。 火紅的嫁衣襯著肌膚如雪裙犹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天衔憨,我揣著相機(jī)與錄音叶圃,去河邊找鬼。 笑死践图,一個胖子當(dāng)著我的面吹牛掺冠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播码党,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼德崭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了揖盘?” 一聲冷哼從身側(cè)響起眉厨,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兽狭,沒想到半個月后憾股,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椭符,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年荔燎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片销钝。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡有咨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蒸健,到底是詐尸還是另有隱情座享,我是刑警寧澤婉商,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站渣叛,受9級特大地震影響丈秩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淳衙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一蘑秽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧箫攀,春花似錦肠牲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梢睛,卻和暖如春肥印,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绝葡。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工深碱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人藏畅。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓莹痢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親墓赴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

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

  • mad hippie 面霜&維C精華 面霜抗老抗氧化航瞭,主打多種勝肽诫硕,質(zhì)地很輕盈很舒適】睿抗老效果講起來也是很玄幻的章办,...
    雯雯少年閱讀 191評論 0 0
  • 8月,是我進(jìn)入拾光瑜伽館的第二個月滨彻,看到電子秤上不斷下滑的數(shù)字和腰間日漸消失的贅肉藕届,瞬間淚水汗水齊飛。 俗話說...
    無心梅花閱讀 684評論 0 0
  • 1亭饵、完成1小時的閱讀休偶,但不是在早上,是在下午辜羊,睡醒午覺后踏兜,看完1小時書女兒就醒了 2词顾、騎單車帶寶貝女兒兜風(fēng) 3、l...
    小確幸HYF閱讀 160評論 0 0
  • 最近一直在研究三國碱妆。作為一個網(wǎng)絡(luò)營銷從業(yè)人員肉盹,決定結(jié)合起來隨便談?wù)劇5弁踔勒钗玻瑱?quán)謀之術(shù)上忍。道代表處世行事的思路和方向...
    包云東閱讀 388評論 0 6