這幾天公司不是很忙,整理了一些瑣碎的知識點。

一、SDWebImage的原理,實現機制。

:先從內存圖片緩存查找是否有圖片,如果內存中已經有圖片緩存,SDImageCacheDelegate 回調 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager。
2:如果內存緩存中沒有,生成 NSInvocationOperation 添加到隊列開始從硬盤查找圖片是否已經緩存。
3:SDWebImageManagerDelegate 回調 webImageManager:didFinishWithImage: 到 UIImageView+WebCache 等前端展示圖片。
4:如果從硬盤緩存目錄讀取不到圖片,說明所有緩存都不存在該圖片,需要下載圖片,回調 imageCache:didNotFindImageForKey:userInfo:。
5:圖片下載由 NSURLConnection 來做,實現相關 delegate 來判斷圖片下載中、下載完成和下載失敗
6:connectionDidFinishLoading: 數據下載完成后交給 SDWebImageDecoder 做圖片解碼處理
7:SDWI 也提供了 UIButton+WebCache 和 MKAnnotationView+WebCache,方便使用
8:SDWebImagePrefetcher 可以預先下載圖片,方便后續使用

二、如何解決TableView卡的問題。

tableView 滑動卡的問題主要是因為從緩存中或者是從本地讀取圖片給UIImage的時候耗費的時間。如果是動態行高,計算出高度之后在緩存。
把這兩句話放到子線程:

NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:app.icon]]; //得到圖像數據  
        UIImage *image = [UIImage imageWithData:imgData];

三、block和代理的,通知的區別。block的用法需要注意些什么。

1:代理: 代理就是來解決類耦合性和封裝變化點的,多人開發中,防止一個類改變導致別的地方也被動改變,代理通俗的說其實就是set賦值,用對象地址調用對象的方法,給對象賦值。代理是委托方聲明方法,并調用,代理方實現。
2:block:目的就是能夠直接存儲一個代碼塊的實現部分,而不需要再去定義一個函數,block就是去相當于實現代理,block是委托方聲明block方法,并調用,在代理方里面用委托方調用那個block方法,并且實現。block效率更高。block防止內存泄漏,解決循環引用的問題。
3:通知:首先通知可以群發,而代理和block只能單發,通知就是一方傳值,一方接收值,把所有的東西傳到一個集合里,可以控制發送給全部還是自己,接收也同樣可以控制。通知傳值在遠距離傳值時有優勢。例子:第一頁推出第二頁,第二頁推出第三頁,要想把第三頁的值傳給第一頁,用通知傳。
如果用block,block的實體在第一頁,指針在第三頁,無法結合,因為第三頁是第二頁推出來的,需要和第二頁先進行交互,代理道理和block差不多。

四、strong,weak,retain,assign,copy, nomatic 等的區別。

1、assign: 簡單賦值,不更改索引計數,防止循環引用。
2、strong:一般來說,類“內部”的屬性設置為strong,類“外部”的屬性設置為weak。說到底就是一個歸屬權的問題。小心出現循環引用導致內存無法釋
3: retain:保留計數,獲得對象的所有權。不用自動管理內存(ARC)用retain很多;retain拷貝指針。
4:copy: 建立一個索引計數為1的對象,然后釋放舊對象 用來復制對象。
5:nomatic:對屬性賦值的時候不加鎖,多線程并發訪問會提高性能。

五、NSString 的時候用copy和strong的區別。

首先要用copy因為copy修飾的NSString,在初始化時,如果來源是NSMutableString的話,會對來源進行一次深拷貝,將來源的內存地址復制一份,這樣,兩個對象就一點關系就沒有了,無論你怎么操作來源,都不會對自己的NSString有任何影響。
比如你有一個:

@property(nonatomic,copy) NSString *str;

然后有一個:

NSMutableString *sourceStr;

當你進行str = sourceStr操作之后,緊接著你又改變了sourceStr的內容sourceStr = @"change";那么str的內容并不會改變. 如果你的str不是copy修飾的,而是strong修飾的,那么str的值也會變成@"change";因為strong是淺拷貝的,并不會對來源的內存地址進行拷貝,你只需要記住一點,當你給你的的NSString對象賦值時,如果來源是NSMutableString,那么這種情況就必須要用copy;如果你確定來源是不可變類型的,比如@"http://www.baidu.com”這種固定的字符串,那么用strong比較好.

  1. 首先,得到視頻的URL
  2. 根據URL創建AVPlayerItem
  3. 把AVPlayerItem 提供給 AVPlayer
  4. AVPlayerLayer 顯示視頻。
  5. AVPlayer 控制視頻, 播放, 暫停, 跳轉 等等。
  6. 播放過程中獲取緩沖進度,獲取播放進度。
  7. 視頻播放完成后做些什么,是暫停還是循環播放
    使用 AVPlayer 的時候,一定要注意 AVPlayer 、 AVPlayerLayer 和 AVPlayerItem 三者之間的關系。 AVPlayer 負責控制播放, layer 顯示播放, item 提供數據,當前播放時間, 已加載情況。 Item 中一些基本的屬性, status, duration, loadedTimeRanges, currentTime(當前播放時間)。
    介紹項目:
    在介紹項目的時候,可以從項目整體到模塊,模塊從左到右,界面從上到下的順序一一介紹。或者從項目整體到模塊,在介紹模塊時,從重要、核心模塊開始。在介紹項目時,要將項目整體定位、功能模塊、主要技術都要介紹清楚,有一定的層次性
    2、MVC設計模式是什么? 你還熟悉什么設計模式
    設計模式:并不是一種新技術,而是一種編碼經驗,使用比如java中的接口,iphone中的協議,繼承關系等基本手段,用比較成熟的邏輯去處理某一種類型的事情,總結為所謂設計模式。
    mvc設計模式 :模型,視圖,控制器,可以將整個應用程序在思想上分成三大塊,對應是的數據的存儲或處理,前臺的顯示,業務邏輯的控制。 Iphone本身的設計思想就是遵循mvc設計模式
    代理模式:代理模式給某一個對象提供一個代理對象,并由代理對象控制對源對象的引用.
    單例模式:單例模式創建以后,全局使用。說白了就是一個類不通過alloc方式創建對象,而是用一個靜態方法返回這個類的對象。
    3:開發者證書
    證書分兩種:開發者證書、發布者證書。前者開發時使用,后者發布使用
    (1) 模擬器調試無需代碼簽名;真機調試需開發者證書代碼簽名;發布時需發布證書簽名
    (2) 代碼簽名需要:證書+私鑰,
    (3) 真機調試時要求在設備上安裝描述文件(provision profile),該文件包含信息:調試者證書,
    授權調試設備清單,應用ID。一個應用對應一個描述文件
    4:如何追蹤app崩潰率,如何解決線上閃退
    當App閃退時,操作系統會生成一個crash日志,保存在設備上。crash日志上有很多有用的信息,比如每個正在執行線程的完整堆棧跟蹤信息和內存映像,這樣就能夠通過解析這些信息進而定位crash發生時的代碼邏輯,從而找到App閃退的原因
    違反iOS系統規則產生crash的三種類型:
    (1)內存報警閃退
    內存過低時,系統會發出內存過低警告。嘗試收回一些內存,如果沒有改善,將會終止當前的運行程序。
    (2) 響應超時
    當應用程序對一些特定的事件(比如啟動、掛起、恢復、結束)響應不及時蘋果的Watchdog機制會把應用程序干掉。
    (3) 用戶強制退出
    總結閃退原因:常見的崩潰原因基本都是代碼邏輯問題或資源問題,比如數組越界,訪問野指針或者資源不存在,或資源大小寫錯誤等。
    5:APP發布的上架流程
    1.登錄應用發布網站添加應用信息;
    2.下載安裝發布證書;
    3.選擇發布證書,使用Archive編譯發布包,用Xcode將代碼(發布包)上傳到服務器;
    4.等待審核通過;
    5.生成IPA:菜單欄->Product->Archive.
    6:對沙盒的理解
    1.應用程序在自己的沙盒中運作,但是不能訪問任何其他應用程序的沙盒;
    2.應用之間不能共享數據,沙盒里的文件不能被復制到其他應用程序的文件夾中,也不能把其他應用文件夾復制到沙盒中;
    3.蘋果禁止任何讀寫沙盒以外的文件,禁止應用程序將內容寫到沙盒以外的文件夾中;
    4.沙盒目錄里有三個文件夾:Documents——存儲;應用程序的數據文件,存儲用戶數據或其他定期備份的信息;Library下有兩個文件夾,Caches存儲應用程序再次啟動所需的信息,Preferences包含應用程序的偏好設置文件,不可在這更改偏好設置;temp存放臨時文件即應用程序再次啟動不需要的文件
    7、內存的使用和優化的注意事項
    1:重用問題:如UITableViewCells、UICollectionViewCells、UITableViewHeaderFooterViews設置正確的reuseIdentifier,充分重用
    2)盡量把views設置為不透明:當opque為NO的時候,圖層的半透明取決于圖片和其本身合成的圖層為結果,可提高性能;
    3)不要使用太復雜的XIB/Storyboard:載入時就會將XIB/storyboard需要的所有資源,包括圖片全部載入內存,即使未來很久才會使用。那些相比純代碼寫的延遲加載,性能及內存就差了很多;
    4)正確選擇圖片加載方式:
    8:plist文件是用來做什么的。一般用它來處理一些什么方面的問題
    我們常用的NSUserDefaults偏好設置實質上就是plist文件操作。plist文件是用來持久化存儲數據的;我們要存儲全國城市名稱和id,那么我們要優先選擇plist直接持久化存儲,因為更簡。
    9、在提交蘋果審核時,遇到哪些問題被拒絕
    1)最常見到的就是app中有虛擬物品交易,但是不是走內購導致被拒。
    2)音頻類App或者使用到音頻相關的app,因為版權問題而被拒
    10、熟悉CocoaPods么?能大概講一下工作原理么
    它會為我們創建一個工作區間,然后將所有在cocoapods中的引入的第三方庫以libPods.a這樣的方式引入到我們的工程中,這樣就可以直接訪問第三方庫了
    11、你一般是如何調試Bug的?
    線上Bug:項目使用了友盟統計,因此會有崩潰日志,通過解析dYSM可以直接定位到大部分bug崩潰之處
    測試Bug:根據測試所反饋的bug描述,若語義不清晰,則直接找到提bug人,操作給開發人員看,最好是可以bug復現。解決bug時,若能根據描述直接定位bug出錯之處,則好處理;若無法直觀定位
    12、簡單描述一下XIB與Storyboards,說一下他們的優缺點
    優點:
    ? XIB:在編譯前就提供了可視化界面,可以直接拖控件,也可以直接給控件添加約束,更直觀一些,而且類文件中就少了創建控件的代碼,確實簡化不少,通常每個XIB對應一個類。
    ? Storyboard:在編譯前提供了可視化界面,可拖控件,可加約束,在開發時比較直觀,而且一個storyboard可以有很多的界面,每個界面對應一個類文件,通過storybard,可以直觀地看出整個App的結構。
    ? 缺點:
    ? XIB:需求變動時,需要修改XIB很大,有時候甚至需要重新添加約束,導致開發周期變長。XIB載入相比純代碼自然要慢一些。對于比較復雜邏輯控制不同狀態下顯示不同內容時,使用XIB是比較困難的。當多人團隊或者多團隊開發時,如果XIB文件被發動,極易導致沖突,而且解決沖突相對要困難很多。
    ? Storyboard:需求變動時,需要修改storyboard上對應的界面的約束,與XIB一樣可能要重新添加約束,或者添加約束會造成大量的沖突,尤其是多團隊開發。對于復雜邏輯控制不同顯示內容時,比較困難。當多人團隊或者多團隊開發時,大家會同時修改一個storyboard,導致大量沖突,解決起來相當困難。
    13、在App中混合HTML5開發App如何實現的。在App中使用HTML5的優缺點是什么?
    常是通常UIWebView來實現,用代理方法去攔截。
    優缺點:
    ? iOS加入H5響應比原生要慢很多,體驗不太好,這是缺點。
    ? iOS加入H5可以實現嵌入別的功能入口,可隨時更改,不用更新版本就可以上線,這是最大的優點
    14、請描述一下同步和異步,說說它們之間的區別。
    區別:
    ? 線程同步:是多個線程訪問同一資源時,只有當前正在訪問的線程訪問結束之后,其他線程才能開始訪問(被阻塞)。
    ? 線程異步:是多個線程在訪問競爭資源時,可以在空閑等待時去訪問其它資源(不被阻塞)。
    15、線程是什么?進程是什么?二者有什么區別和聯系?
      一個程序至少有一個進程,一個進程至少有一個線程:
      進程:一個程序的一次運行,在執行過程中擁有獨立的內存單元,而多個線程共享一塊內存
      線程:線程是指進程內的一個執行單元。
      聯系:線程是進程的基本組成單位
    15、iOS本地數據存儲都有哪幾種方式?
      NSUserDefaults:用來保存應用程序設置和屬性、用戶保存的數據。用戶再次打開程序或開機后這些數據仍然存在。NSUserDefaults可以存儲的數據類型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。缺點:如果要存儲其他類型,需要轉換為前面的類型,才能用NSUserDefaults存儲。
     Write寫入方式永久保存在磁盤中。第一步:獲得文件即將保存的路徑:第二步:生成在該路徑下的文件:第三步:往文件中寫入數據:最后:從文件中讀出數據:
     SQLite3:采用SQLite數據庫來存儲數據。SQLite作為一中小型數據庫,應用ios中,跟前三種保存方式相比,相對比較復雜一些。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內容

  • 1、為什么說Objective-C是一門動態的語言? 靜態、動態是相對的,這里動態語言指的是不需要在編譯時確定所有...
    River_YYH閱讀 1,972評論 0 14
  • 1. clipsToBounds:是指視圖上的子視圖,如果超出父視圖的部分就截取掉,masksToBounds:是...
    Alfred的記錄本閱讀 441評論 0 0
  • 1、ios內存管理機制 iOS內存管理機制的原理是引用計數,當這塊內存被創建后,它的引用計數0->1,表示有一個對...
    Daniel_you閱讀 564評論 0 6
  • OC的理解與特性OC作為一門面向對象的語言,自然具有面向對象的語言特性:封裝、繼承、多態。它既具有靜態語言的特性(...
    LIANMING_LI閱讀 533評論 0 0
  • 一、基礎知識點 設計模式是什么? 你知道哪些設計模式,并簡要敘述? 設計模式是一種編碼經驗,就是用比較成熟的邏輯去...
    軟件iOS開發閱讀 1,296評論 0 26