總結一次iOS面試

昨天去了網易參加了次iOS面試,參觀了下網易的辦公環境,也認識到了一些不足。分享下部分問到的問題。(有問題歡迎評論)

weak 和 assign 的區別?

assign 可以用作對象和基本數據類型,使用之后如果沒有置為nil,可能就會產生野指針。
weak 只可以用于對象, 一旦不進行使用后,默認會被置為nil,就不會產生野指針。

weak是如何將不用的指針置為nil?

runtime 對注冊的類, 會進行布局,對于 weak 對象會放入一個 hash 表中。 用 weak 指向的對象內存地址作為 key,當此對象的引用計數為0的時候會 dealloc,假如 weak 指向的對象內存地址是a,那么就會以a為鍵, 在這個 weak 表中搜索,找到所有以a為鍵的 weak 對象,從而設置為 nil。

Post 和 Put 請求區別?

POST
用于提交請求,可以更新或者創建資源,是非冪等的。如果次發出同樣的POST請求后,其結果是創建出了若干的資源。

PUT
用于向指定的URI傳送更新資源,是冪等的。比如用PUT修改一篇文章,然后在做同樣的操作,每次操作后的結果并沒有不同。

創建操作可以使用POST,也可以使用PUT,區別在于POST 是作用在一個集合資源之上的(/uri),而PUT操作是作用在一個具體資源之上的(/uri/xxx),再通俗點說,如果URL可以在客戶端確定,那么就使用PUT,如果是在服務端確定,那么就使用POST,比如說很多資源使用數據庫自增主鍵作為標識信息,而創建的資源的標識信息到底是什么只能由服務端提供,這個時候就必須使用POST。

CoreData 是否線程安全?

“In Core Data, the managed object context can be used with two concurrency patterns, defined by NSMainQueueConcurrencyType and NSPrivateQueueConcurrencyType.”
(Developer Library Core Data)

關于其他類的線程安全可參考 :
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html

Swift中map和flatmap區別?

flatMap很像map函數,但是它摒棄了那些值為nil的元素。而且flapMap函數能夠將可選類型(optional)轉換為非可選類型(non-optionals),且對多維數組使用會降維。

編譯后可不可以為類增加屬性?

可以,甚至可以給在分類中(category)添加

static char *propertyCharkey = "propertyKey";

- (void)setPropertyWithName:(NSString *)name{
    objc_setAssociatedObject(self, &propertyCharkey, name, OBJC_ASSOCIATION_COPY);
}

- (NSString *)getProperty{
    return objc_getAssociatedObject(self, &propertyCharkey);
}

方法調用原理?

在Objective-C中,消息直到運行時才綁定到方法實現上。編譯器會將消息表達式[receiver message]轉化為一個消息函數的調用,即objc_msgSend。這個函數將消息接收者和方法名作為其基礎參數,如以下所示:

objc_msgSend(receiver, selector)
如果消息中還有其它參數,則該方法的形式如下所示:
objc_msgSend(receiver, selector, arg1, arg2, …)

這個函數完成了動態綁定的所有事情:

  1. 首先它找到selector對應的方法實現。因為同一個方法可能在不同的類中有不同的實現,所以我們需要依賴于接收者的類來找到的確切的實現。
  2. 它調用方法實現,并將接收者對象及方法的所有參數傳給它。
  3. 最后,它將實現返回的值作為它自己的返回值。

block部分

何時需要使用weakSelf?

weakSelf通常為了消除循環引用,如果block沒有直接或者間接被self存儲,就不會產生循環引用, 這時使用self是沒問題的。

比如常見的動畫,雖然block retain了self,但self并沒有retain block

 [UIView animateWithDuration:0.5 animations:^{
         self.view.backgroundColor = [UIColor grayColor];
 }];

下面這樣會造成循環引用,需要使用weak self

@property (nonatomic,  strong) void (^testBlock)();

 self.testBlock = ^(){
       self.view.backgroundColor = [UIColor blackColor];
 };

下面這種情況也是很常見的:

@property (nonatomic, strong) Object *object;

self.object = [[Object alloc]init];
 [self.object blockFunction:^{
        self.view.backgroundColor = [UIColor blueColor];
 }];

但是光看這些是不能決定是否使用weak self的,因為根本不知道object這個實例是否在方法blockFunction內存儲了block并間接引用了self

這里就需要使用weak self來打破self-self.object-block這個引用環

- (void)blockFunction:(ObjectBlock)block{
    self.testBlock = block;
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        block();
    });
}
下面倆個問題了解比較少,得清楚block實現原理,抽空好好研究下
__block 是如何實現的?

http://blog.csdn.net/abc649395594/article/details/47086751

block有哪些類型?

https://segmentfault.com/a/1190000006479320

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容

  • 把網上的一些結合自己面試時遇到的面試題總結了一下,以后有新的還會再加進來。 1. OC 的理解與特性 OC 作為一...
    AlaricMurray閱讀 2,585評論 0 20
  • 1.屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作...
    曾令偉閱讀 1,076評論 0 10
  • 2016.05.20 10:24 塵封已久的學習基礎總結,最近公司項目不是很忙,終于抽空整理出來,現分享出來。 1...
    si1ence閱讀 19,744評論 61 589
  • 一、深復制和淺復制的區別? 1、淺復制:只是復制了指向對象的指針,即兩個指針指向同一塊內存單元!而不復制指向對象的...
    iOS_Alex閱讀 1,401評論 1 27
  • 作者 彡白 2015.5.29早晨 我們把腳步還給大地 讓星辰結伴隨行 眼睛站在路口 云作船只夢游 一雙手擁抱空...
    尼旦閱讀 238評論 5 2