Objective-C代碼規(guī)范個(gè)人的小總結(jié)

最近在看到一些面試題太雨,問的是代碼規(guī)范的相關(guān)問題籽暇,記錄一下個(gè)人的見解动知,有錯(cuò)誤的地方望指正

Paste_Image.png

修改為:

typedef ENUM(NSInteger, UserSex){
  UserSexMan,
  UserSexWoman
}UserSex;

@interFace UserModel : NSObject  //注意冒號之間的空格

@property (nonatomic, copy) NSString *userName; //NSString用copy修飾
@property (nonatomic, assign) NSInteger userAge; //保持nonatomic在前,另外個(gè)人喜歡用NSInteger掠河,適配32位和64位沽损?
@property (nonatomic, assign) UserSex userSex;

- (instancetype)initUserModelWithUserName:(NSString *)name age:(NSInteger)age; 
// 這里我用instancetype取代id
// 未知類型的的對象可以用id關(guān)鍵字表示
// instancetype的作用灯节,就是使那些非關(guān)聯(lián)返回類型的方法返回所在類的類型。
// 后面不用with修飾
// 具體可以參考:http://blog.csdn.net/kuizhang1/article/details/18048829
/*
  *相同點(diǎn)
  *都可以作為方法的返回類型
  *不同點(diǎn)
  *instancetype可以返回和方法所在類相同類型的對象绵估,id只能返回未知類型的對象;
  *instancetype只能作為返回值卡骂,不能像id那樣作為參數(shù)国裳,比如下面的寫法:
*/

- (void)didLogin; // do or did? login是一個(gè)單詞

看完上面的問題突然想起其他幾個(gè)問題:

1.assgin和weak的區(qū)別:
  • assign適用于基本數(shù)據(jù)類型,weak是適用于NSObject對象全跨,并且是一個(gè)弱引用

  • assign其實(shí)也可以用來修飾對象缝左。那么我們?yōu)槭裁床挥盟揎棇ο竽兀恳驗(yàn)楸籥ssign修飾的對象(一般編譯的時(shí)候會產(chǎn)生警告:Assigning retained object to unsafe property; object will be released after assignment)在釋放之后浓若,指針的地址還是存在的渺杉,也就是說指針并沒有被置為nil,造成野指針挪钓。對象一般分配在堆上的某塊內(nèi)存是越,如果在后續(xù)的內(nèi)存分配中,剛好分到了這塊地址碌上,程序就會崩潰掉倚评。

  • 基礎(chǔ)數(shù)據(jù)類型一般分配在上浦徊,棧的內(nèi)存會由系統(tǒng)自己自動處理,不會造成野指針天梧,所以可以用assign修飾

  • weak修飾的對象在釋放之后盔性,指針地址會被置為nil。所以現(xiàn)在一般弱引用就是用weak呢岗。weak使用場景:
    1.ARC中避免循環(huán)引用冕香,比如delegate就是用weak修飾
    2.自身已經(jīng)對它進(jìn)行一次強(qiáng)引用,沒有必要再強(qiáng)引用一次時(shí)也會使用weak后豫。比如:自定義 IBOutlet控件屬性一般也使用weak暂筝,當(dāng)然也可以使用strong

2.strong和copy的區(qū)別
  • strong 與copy都會使引用計(jì)數(shù)加1,但strong是兩個(gè)指針指向同一個(gè)內(nèi)存地址硬贯,copy會在內(nèi)存里拷貝一份對象焕襟,兩個(gè)指針指向不同的內(nèi)存地址。個(gè)人理解類似于淺拷貝和深拷貝的區(qū)別
3.__block與__weak的區(qū)別
  • 代碼中__block是用來修飾一個(gè)變量饭豹,這個(gè)變量就可以在block中被修鸵赖,__block:使用 __block修飾的變量在block代碼塊中會被retain(ARC下會retain,MRC下不會retain)
  • __weak:使用__weak修飾的變量不會在block代碼塊中被retain 同時(shí)拄衰,在ARC下它褪,要避免block出現(xiàn)循環(huán)引用 __weak typedof(self)weakSelf = self;
4. block變量定義時(shí)為什么用copy?block是放在哪里的翘悉?
  • block本身是像對象一樣可以retain茫打,和release。但是妖混,block在創(chuàng)建的時(shí)候老赤,它的內(nèi)存是分配在棧(stack)上,可能被隨時(shí)回收制市,而不是在堆(heap)上抬旺。他本身的作于域是屬于創(chuàng)建時(shí)候的作用域,一旦在創(chuàng)建時(shí)候的作用域外面調(diào)用block將導(dǎo)致程序崩潰祥楣。通過copy可以把block拷貝(copy)到堆开财,保證block的聲明域外使用。

參考資料
文/九零猴VS久林(簡書作者)


NSString(NSArray误褪、NSURLReques)到底用copy還是strong
  • 對于copy修飾的屬性來說责鳍,若賦值源是NSString、NSArray兽间、NSURLRequest三者其中之一历葛,復(fù)制時(shí)是shadow copy(淺復(fù)制),即地址相同渡八,類型相同
  • 來源若是NSMutableString啃洋,NSMutableArray传货,NSMutableURLRequest之一
    1.使用strong修飾的,賦值后宏娄,地址相同问裕,類型也相同
    2.使用copy修飾的,會復(fù)制賦值源所生成的對象孵坚,復(fù)制后粮宛,地址不同,而來源是NSMutableArray的卖宠,甚至連類型也不同(__NSArrayI__NSArrayM
    )巍杈,說明復(fù)制時(shí)都是deep copy(深復(fù)制)

總得來說:
1.如果來源是NSString,使用copy或strong沒有區(qū)別扛伍。
2.如果來源是NSMutableString筷畦,NSString對象會因其改變而改變。若使用copy刺洒,因?yàn)槭巧顝?fù)制鳖宾,產(chǎn)生了一個(gè)新的對象,就可以避免以上情況逆航。也就是說如果我們不想因?yàn)镹SString類型屬性會對來源進(jìn)行修改鼎文,我們可以用copy來修飾

更新:github上的參考答案

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市因俐,隨后出現(xiàn)的幾起案子拇惋,更是在濱河造成了極大的恐慌,老刑警劉巖抹剩,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撑帖,死亡現(xiàn)場離奇詭異,居然都是意外死亡吧兔,警方通過查閱死者的電腦和手機(jī)磷仰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來境蔼,“玉大人,你說我怎么就攤上這事伺通」客粒” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵罐监,是天一觀的道長吴藻。 經(jīng)常有香客問我,道長弓柱,這世上最難降的妖魔是什么沟堡? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任侧但,我火速辦了婚禮,結(jié)果婚禮上航罗,老公的妹妹穿的比我還像新娘禀横。我一直安慰自己,他們只是感情好粥血,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布柏锄。 她就那樣靜靜地躺著,像睡著了一般复亏。 火紅的嫁衣襯著肌膚如雪趾娃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天缔御,我揣著相機(jī)與錄音抬闷,去河邊找鬼。 笑死耕突,一個(gè)胖子當(dāng)著我的面吹牛笤成,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播有勾,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼疹启,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蔼卡?” 一聲冷哼從身側(cè)響起喊崖,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雇逞,沒想到半個(gè)月后荤懂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡塘砸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年节仿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掉蔬。...
    茶點(diǎn)故事閱讀 40,918評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡廊宪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出女轿,到底是詐尸還是另有隱情箭启,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布蛉迹,位于F島的核電站傅寡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荐操,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一芜抒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧托启,春花似錦宅倒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肩民,卻和暖如春唠亚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背持痰。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工灶搜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人工窍。 一個(gè)月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓割卖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親患雏。 傳聞我的和親對象是個(gè)殘疾皇子鹏溯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評論 2 361

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