關(guān)于iOS的一些面試題

(id)數(shù)據(jù)類型:1、對(duì)象不需要*號(hào)
2、可以發(fā)送任何存在的消息
3、不能用.屬性
4、可以指向任何類的對(duì)象,而不關(guān)心其具體的類型

KVC和KVO
kVC 鍵值編碼 通過把屬性名當(dāng)成key 來(lái)改變屬性的值
KVO 鍵值觀察者 通過KVC的方式 把屬性當(dāng)做key 來(lái)觀察屬性值的變化 做出響應(yīng) 需移除觀察者

單例 (一個(gè)類的對(duì)象只能被使用一次)
通過方法 讓對(duì)象只創(chuàng)建一次 可以避免重復(fù)創(chuàng)建 節(jié)省內(nèi)存開支
使用環(huán)境:不需要重復(fù)創(chuàng)建的操作類中 封裝數(shù)據(jù)庫(kù) 網(wǎng)絡(luò)請(qǐng)求 某個(gè)固定的對(duì)象 不希望在使用的時(shí)候 被創(chuàng)建成其他的對(duì)象(當(dāng)前用戶)
單例的生命周期(從程序開始到程序結(jié)束)

寫一個(gè)單例

//單例
static User *user = nil;

@implementation User

+(id)defaultManager{
    @synchronized (self) {
        if (user == nil) {
            user = [[User alloc]init];
        }
    }
    return user;
}

+(instancetype)allocWithZone:(struct _NSZone *)zone{
    if (user == nil) {
        user = [[User alloc]init];
    }
    return user;
}
static HTTP_Manager_Delegate *manager=nil;

//在多線程中的一個(gè)只能有一次的標(biāo)識(shí)符
static dispatch_once_t onceToken;

//多線程中 查看是否有一個(gè)帶有onceToken標(biāo)識(shí)的對(duì)象
dispatch_once(&onceToken, ^{
    //如果沒有 創(chuàng)建
    manager = [[HTTP_Manager_Delegate alloc]init];
});
//如果有 就return
return manager;

@class
僅僅是聲明一個(gè)類名,并不會(huì)包含類的完整聲明
能解決循環(huán)包含的問題:當(dāng)兩個(gè)類文件有循環(huán)依賴關(guān)系 ( A 引用 B , B 引用 A ) 時(shí),需要用 @class

import 和 #include

import 是 Objective-C 導(dǎo)入頭文件的關(guān)鍵字,完整地包含某個(gè)文件的內(nèi)容

會(huì)自動(dòng)導(dǎo)入一次,不會(huì)重復(fù)導(dǎo)入;
不會(huì)引發(fā)交叉編譯;

include

C/C++ 導(dǎo)入頭文件的關(guān)鍵字,完整地包含某個(gè)文件的內(nèi)容
會(huì)引發(fā)交叉編譯, 因?yàn)樵?Objective-C 中會(huì)存在C/C++和Objective-C 混編的問題,如果用 #include 引入頭文件,會(huì)導(dǎo)致交叉編譯

import<> 和 import""
<> : 引用系統(tǒng)文件,它用于對(duì)系統(tǒng)自帶的頭文件的引用,編譯器會(huì)在系統(tǒng)文件目錄下去查找該文件.

"": 用戶自定義的文件用雙引號(hào)引用,編譯器首先會(huì)在用戶目錄下查找,然后到安裝目錄中查

網(wǎng)絡(luò)請(qǐng)求:首先需要一個(gè)接口,還需要request(設(shè)置緩存方式,請(qǐng)求時(shí)間),需要連接服務(wù)器,請(qǐng)求數(shù)據(jù),解析;

AFN
全稱是AFNetworking,是對(duì)NSURLConnection的一層封裝
它運(yùn)行效率沒有ASI高,但是使用比ASI簡(jiǎn)單
它 實(shí)現(xiàn)推送,要一個(gè)接口,封裝參數(shù)(字典)、manager 設(shè)置請(qǐng)求格式 ,還可以post/get請(qǐng)求

get/post區(qū)別
get:url與參數(shù)封裝到一起,有長(zhǎng)度限制,安全系數(shù)低
post:url與參數(shù)分開,長(zhǎng)度不受限,安全系數(shù)高

block作用:
1、保存代碼。一段代碼在合適的時(shí)間執(zhí)行(請(qǐng)求成功時(shí)彈出一個(gè)提示框)。
2、block一般用來(lái)兩個(gè)的類的數(shù)據(jù)逆?zhèn)鬟f(修改昵稱的時(shí)候)
3、block也可以將一個(gè)操作當(dāng)做參數(shù)來(lái)傳遞
做回調(diào)函數(shù),可替代代理;
注:如果要在代碼塊里修改外部的局部變量的時(shí)候,要用__block或者_(dá)_weak修飾,不然會(huì)崩潰。

循環(huán)引用:
strong weak

delegate 可以用assign、weak
用weak,避免野指針(一個(gè)對(duì)象釋放了,但內(nèi)存沒有釋放掉)

UITableView的重用機(jī)制?.

tableView 出現(xiàn)界面卡死,或者上下滑動(dòng)出現(xiàn)卡頓現(xiàn)象的原因?
1、沒有使用重用機(jī)制;
2、滑動(dòng)cell時(shí),有耗時(shí)操作,阻塞主線程(只能用來(lái)更新UI)

多線程:用來(lái)處理耗時(shí)操作,增加用戶體驗(yàn)
多線程包括?
NSThread:開辟線程,需要手動(dòng)管理
NSOperation:需要有線程隊(duì)列,可以添加依賴關(guān)系,(如果不放在線程中,它不一定在子線程中)
GCD:NSOperation是基于GCD的封裝
1》為多核的并行運(yùn)算提出了解決方案
2》GCD會(huì)利用更多的CPU內(nèi)核,比如雙核,四核
3》GCD自動(dòng)管理線程的生命周期(創(chuàng)建線程,調(diào)度任務(wù),銷毀線程)
4》程序員只需要告訴GCD想要執(zhí)行什么任務(wù),不需要編寫任何線程管理代碼

  • 1、創(chuàng)建視圖
  • 2、創(chuàng)建一個(gè)串行隊(duì)列
  • 3、用異步方式執(zhí)行串行隊(duì)列中的任務(wù)
  • 4、加載網(wǎng)絡(luò)資源
  • 5、回到主線程
  • 6、更新UI
    執(zhí)行隊(duì)列的四種方式:
    串行同步
    串行異步
    并行同步
    并行異步

數(shù)據(jù)持久化

常用的數(shù)據(jù)持久化方式有: 屬性列表(plist文件)、歸檔(存儲(chǔ)自定義的類的對(duì)象時(shí);存儲(chǔ)用戶的數(shù)據(jù)(昵稱,uid))、偏好設(shè)置(NSUserDefault(存儲(chǔ)一些簡(jiǎn)單的數(shù)據(jù)(用戶的設(shè)置)))、sqlite3、core data、FMDB(大量數(shù)據(jù)的時(shí)候) create table student IF NOT EXISTS (id
integer, name text, age text)

當(dāng)有少量基礎(chǔ)數(shù)據(jù)類型的數(shù)據(jù)和NSArray、NSDictionary需要儲(chǔ)存并且無(wú)需加密時(shí),就以使用plist文件

儲(chǔ)存少量的數(shù)據(jù),而且需要加密,比如登陸密碼、獲取的accessToken時(shí),或者需要儲(chǔ)存對(duì)象,比如做收藏夾、最近訪問,都可以使用鍵值歸檔

偏好設(shè)置的話就是儲(chǔ)存一些用戶設(shè)置信息,比如程序中設(shè)置當(dāng)中的一些開關(guān)的Bool值等

當(dāng)需要儲(chǔ)存大量的數(shù)據(jù)時(shí),比如需要離線緩存一些數(shù)據(jù),就需要使用數(shù)據(jù)庫(kù)了,sqlit3是c語(yǔ)言的東西,使用起來(lái)不是特別方便,而FMDB是oc對(duì)其的封裝使用起來(lái)比較方便,所以一般開發(fā)當(dāng)中都是使用FMDB

VFL(可視化格式語(yǔ)言)有幾個(gè)標(biāo)示符?

VFL:Visual Format Language 可視化格式語(yǔ)言
H:水平方向
V: 垂直方向
| 表示父視圖
-  本身表示一段距離
-距離- 就表示指定距離
視圖本身的寬度
[字符串表示的視圖] 表示自動(dòng)布局當(dāng)前視圖 參照視圖
[字符串表示的視圖(視圖的寬高 或者 最小最大的寬高或者相對(duì)寬高)]; 注意:()不要丟掉
H:|-50-[view1(>=100)]-50-|
V:|-100-[view1(30)]
使用自動(dòng)布局的步驟:
1.使用自動(dòng)布局 autulayout    frame 就會(huì)失效 ——>不需要再去設(shè)置視圖的frame
   使用代碼自動(dòng)布局的時(shí)候 需要禁用   translatesAutoresizingMaskIntoConstraints   =NO
2.綁定視圖與字符串
3.添加約束

中國(guó)語(yǔ)言
橫向:距離父視圖左側(cè)100 視圖本身的寬度最小是100 距離父視圖右側(cè)是100
豎向:距離父視圖頂部150 視圖本身的高度是40

可視化語(yǔ)言
H:|-100-[view(>=100)]-100-|
V:|-150-[view(40)]

推送流程:

1、首先要有APPID;
2、根據(jù) APP ID 創(chuàng)建推送證書(根據(jù)需要?jiǎng)?chuàng)建不同環(huán)境下的推送證書)
3、再向推送平臺(tái)提供推送證書
4、向蘋果服務(wù)器發(fā)送設(shè)備信息 接收蘋果服務(wù)器發(fā)送回來(lái)的deviceToken
5、向推送服務(wù)器發(fā)送deviceToken
6、再推送服務(wù)器設(shè)置接收推送的用戶 以及推送的消息內(nèi)容 并發(fā)給蘋果服務(wù)器
7、蘋果服務(wù)器根據(jù) deviceToken 向用戶發(fā)送設(shè)置好的推送消息
8、手機(jī)端接收到推送消息 在自己的應(yīng)用中顯示

NSArray 和 NSSet的區(qū)別?

NSSet :
1、無(wú)序的、不重復(fù)的;存放到NSSet中的內(nèi)容并不會(huì)排序與添加順序也沒有關(guān)系
2、通過anyObject來(lái)訪問單個(gè)元素
3、遍歷NSSet中的每個(gè)元素。通過forin循環(huán)來(lái)遍歷
4、好處:效率高。
5、應(yīng)用場(chǎng)景:

比如重用Cell的時(shí)候,從緩存池中隨便獲取一個(gè)就可以了,無(wú)需按照指定順序來(lái)獲取
當(dāng)需要把數(shù)據(jù)存放到一個(gè)集合中,然后判斷集合中是否有某個(gè)對(duì)象的時(shí)候

*NSArray
1、有序的、可以有重復(fù)對(duì)象。對(duì)象的順序是按照添加的順序來(lái)保存的
2、好處:有序訪問
3、應(yīng)用場(chǎng)景:在絕大多數(shù)需要依賴順序的情況下(比如tableView的數(shù)據(jù)源集合,在實(shí)際操作中要根據(jù)下標(biāo)來(lái)獲取對(duì)象)
4、通過下標(biāo)來(lái)訪問

收藏、最近

收藏和最近主要就是使用工具類對(duì)數(shù)據(jù)進(jìn)行增加和刪除,保存數(shù)據(jù)時(shí)要重寫數(shù)據(jù)的equalto方法(因?yàn)橛?jì)算機(jī)是根據(jù)內(nèi)存地址比較的,而有時(shí)候內(nèi)存地址雖然不同,但是儲(chǔ)存的數(shù)據(jù)確實(shí)一樣的,所以一般根據(jù)數(shù)據(jù)的位置標(biāo)識(shí)(例如id值)比較)

如果是做最近,就需要將上一次的數(shù)據(jù)刪除,添加新的數(shù)據(jù)進(jìn)來(lái),如果在搜藏是需要記錄控件的編輯和選中狀態(tài),就需要在數(shù)據(jù)模型中添加相應(yīng)的屬性,利用數(shù)據(jù)來(lái)控制控件的狀態(tài)

常出現(xiàn)的問題就是使用tableview時(shí)會(huì)出現(xiàn)循環(huán)利用的問題,這個(gè)問題就可以使用數(shù)據(jù)的值來(lái)避免,每次加載cell時(shí),他的狀態(tài)是受數(shù)據(jù)控制的,數(shù)據(jù)不會(huì)發(fā)生循環(huán)利用的問題,這個(gè)問題也就不會(huì)出現(xiàn)了

加載本地圖片有哪些方法?

1、imageNamed
2、dataWithContentsOfFile
3、使用[UIImage imageWithContentOfFile:] 或者[image initWithContentOfFile:]

這些知識(shí)我整理的一小部分,如果有什么錯(cuò)誤,希望指出,我們共同進(jìn)步。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,772評(píng)論 3 422
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,960評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,350評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,549評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,104評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,914評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,089評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,340評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,834評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,106評(píng)論 2 375

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

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,197評(píng)論 30 471
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 1,998評(píng)論 0 7
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場(chǎng)景。SDWebImage的原...
    LZM輪回閱讀 2,025評(píng)論 0 12
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,372評(píng)論 0 35
  • 1.寫一個(gè)NSString類的實(shí)現(xiàn) +(id)initWithCString:(c*****t char *)nu...
    韓七夏閱讀 3,791評(píng)論 2 37