iOS面試題總結(jié)(一)

iOS面試題總結(jié)(一)

  • tableview上拉下拉刷新的原理

    自定義view通過KVO監(jiān)聽tableView的contentOffset偏移量朦佩。根據(jù)不同的偏移量分為不同的狀態(tài)并思,分別是
    typedef NS_ENUM(NSInteger, RefreshState) {

      RefreshStateNormal = 0,
      RefreshStatePulling = 1,
      RefreshStateRefreshing = 2,
      RefreshStateDefault = 3 };
    
    • 通過
      - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)contex
      方法監(jiān)聽tableView的contentOffset的偏移 。
    • 如果沒有滾動(dòng)而且 狀態(tài)是普通模式语稠,則記錄當(dāng)前頭部的偏移量宋彼,返回 if (!self.tableView.isTracking && self.curState == RefreshStateDefault) {
      _startInsetTop = self.tableView.contentInset.top; return; }
    • 判斷當(dāng)前偏移量和最開始偏移量的關(guān)系。得到差值cValue仙畦。如果cValue>0而且小于最大值的話输涕,則為pull狀態(tài)。 如果cValue>high,而且tableView沒有tracking則為refresh狀態(tài)慨畸。如果cValue<=0則為普通狀態(tài)莱坎。如果cValue>high而且tableView.isTracking==NO則為Pull狀態(tài)。
  • 單鏈表給一個(gè)指針寸士,刪除這個(gè)指針指向的節(jié)點(diǎn)檐什。要寫代碼

    • 先跟大家說下我拿到這個(gè)題的第一反應(yīng) 比如我拿到的是一個(gè)指針p ,q = p->next;p->next = q->next,這樣就把p指針域指向的下一個(gè)節(jié)點(diǎn)刪掉了。 但是和題目不符合弱卡。不是刪除p的下一個(gè)指針乃正,而且刪除p本身。當(dāng)然上面的代碼在大學(xué)的單鏈表的增刪改查很普通的代碼谐宙。
    • 然后看了一下 給的答案,雖然很簡單界弧,但是還是覺得很驚訝凡蜻,因?yàn)橄喈?dāng)于是思路的轉(zhuǎn)彎搭综。解決的很巧妙。先說思路后上代碼我們一般第一反應(yīng)是刪掉p划栓,但是沒有頭指針兑巾,沒辦法獲取指向p的節(jié)點(diǎn),我們只能刪掉p的next節(jié)點(diǎn)忠荞,我們轉(zhuǎn)換思路蒋歌,為什么要?jiǎng)h掉p呢,我們還是可以刪掉p->next的委煤,我們只要把p->next的值拷貝到p里面堂油。然后刪掉p->next不就相當(dāng)于刪掉p了嗎”探剩看了真心覺得驚艷府框,雖然代碼很短。Node*q; q = p->next; p->data= q->data; p->next = q->next; free(q)
  • 設(shè)計(jì)一種數(shù)據(jù)結(jié)構(gòu)讥邻,pop迫靖,push,獲取最小值兴使,三種操作的時(shí)間復(fù)雜度都要是O
    普通的棧系宜,push,pop操作的復(fù)雜度是O(1),如果要找出里面的最小值則需要O(1)的時(shí)間。做法是使用空間換取時(shí)間发魄,每一步棧的最小值都通過數(shù)組記錄下來盹牧。

  * 0.如果top_小于最大值
  * 1.先往stack里面塞
  * 2.如果一開始或者說插入的元素比min(top)小。則min_[top+1]= t
  * 3.如果不是的話欠母,則使用top_[top]的值賦值給top_[top+1]
  * 4.最后top_的值++

void push(const T&t){

 if (top_<capacity_) {
        statck_[top_+1] = t;
        if (top_<0|| min_[top_]>t) {
            min_[top_+1] = t;
        }else{
            min_[top_+1] = min_[top_];
        }
        top_++;
    }else{
        printf("出錯(cuò)了");
    }
 }void pop(){
    if (top_>=0) {
        top_--;
    }else{
        printf("出錯(cuò)了");
  }
}
  • ARC和MRC欢策。iOS內(nèi)存管理跟GC的區(qū)別

    • 先穿插一個(gè)簡單的問題,比如@property(copy)NSString*name;重寫這個(gè)的set方法

      - (void)setName:(NSString*)name{
      if(_name != name){

          [_name release];
          _name = [name retain];
       }
      }
      
    • 讓我們來分析下我們?yōu)槭裁匆@么做赏淌。

      • 先判斷_name和name是否相同踩寇,因?yàn)槿绻鸰name和name指向的內(nèi)容地址相同的話,釋放掉name六水,此時(shí)_name指向的那塊內(nèi)存空間可能就會重新分配俺孙,再次調(diào)用name去做事件會發(fā)生野指針異常。
      • 先對_name進(jìn)行realease而不是直接進(jìn)行 賦值操作掷贾,因?yàn)槿绻荣x值的話睛榄,剛才_name指向的內(nèi)存空間會找不到,而發(fā)生內(nèi)存泄露想帅,先把不用的那塊釋放掉场靴,然后再讓當(dāng)前指針指向新的內(nèi)存空間。

ARC自動(dòng)管理內(nèi)存。編譯器在編譯過程中和運(yùn)行的過程中手動(dòng)為對象添加retain realease操作旨剥。

MRC手動(dòng)管理內(nèi)存咧欣。有引用計(jì)數(shù)的概念,根據(jù)引用計(jì)數(shù)是否為0判斷對象何時(shí)釋放轨帜。

區(qū)分下GC和ARC

垃圾回收機(jī)制主要應(yīng)用在Java和.Net平臺魄咕,在兩個(gè)平臺都有一套機(jī)制在后臺檢測不用的對象和對象圖譜。 垃圾回收機(jī)制的間隔周期不是固定的蚌父,有可能是系統(tǒng)檢測到內(nèi)存占用較低哮兰,也可能是上次運(yùn)行過了一段固定時(shí)間等。這樣造成了那些不再使用的對象被釋放的時(shí)間難以確定苟弛。

優(yōu)勢: 垃圾收集可以清理所有不被使用的對象圖譜喝滞,包括循環(huán)引用。垃圾回收運(yùn)行在后臺嗡午,可以作為定期應(yīng)用程序流程運(yùn)行囤躁。

劣勢: 對象釋放的時(shí)間范圍難以確定。當(dāng)垃圾回收運(yùn)行時(shí)荔睹,可能導(dǎo)致系統(tǒng)資源緊張狸演。需要暫停一些優(yōu)先級較低的線程。

ARC的話優(yōu)勢是可以精準(zhǔn)定位那些需要被回收的對象僻他,劣勢是無法處理循環(huán)引用宵距。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吨拗,隨后出現(xiàn)的幾起案子满哪,更是在濱河造成了極大的恐慌,老刑警劉巖劝篷,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哨鸭,死亡現(xiàn)場離奇詭異,居然都是意外死亡娇妓,警方通過查閱死者的電腦和手機(jī)像鸡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哈恰,“玉大人只估,你說我怎么就攤上這事∽疟粒” “怎么了蛔钙?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荠医。 經(jīng)常有香客問我吁脱,道長桑涎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任兼贡,我火速辦了婚禮石洗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘紧显。我一直安慰自己,他們只是感情好缕棵,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布孵班。 她就那樣靜靜地躺著,像睡著了一般招驴。 火紅的嫁衣襯著肌膚如雪篙程。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天别厘,我揣著相機(jī)與錄音虱饿,去河邊找鬼。 笑死触趴,一個(gè)胖子當(dāng)著我的面吹牛氮发,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冗懦,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼爽冕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了披蕉?” 一聲冷哼從身側(cè)響起颈畸,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎没讲,沒想到半個(gè)月后眯娱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爬凑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年徙缴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贰谣。...
    茶點(diǎn)故事閱讀 40,912評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡娜搂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吱抚,到底是詐尸還是另有隱情百宇,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布秘豹,位于F島的核電站携御,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啄刹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一涮坐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧誓军,春花似錦袱讹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至壹甥,卻和暖如春救巷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背句柠。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工浦译, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溯职。 一個(gè)月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓精盅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谜酒。 傳聞我的和親對象是個(gè)殘疾皇子渤弛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評論 2 361

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

  • 把網(wǎng)上的一些結(jié)合自己面試時(shí)遇到的面試題總結(jié)了一下,以后有新的還會再加進(jìn)來甚带。 1. OC 的理解與特性 OC 作為一...
    AlaricMurray閱讀 2,569評論 0 20
  • 1.OC里用到集合類是什么她肯? 基本類型為:NSArray,NSSet以及NSDictionary 可變類型為:NS...
    輕皺眉頭淺憂思閱讀 1,379評論 0 3
  • 1鹰贵,NSObject中description屬性的意義晴氨,它可以重寫嗎?答案:每當(dāng) NSLog(@"")函數(shù)中出現(xiàn) ...
    eightzg閱讀 4,155評論 2 19
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,168評論 30 470
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理碉输。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場景籽前。SDWebImage的原...
    LZM輪回閱讀 2,009評論 0 12