面試題3

1. 你如何理解 iOS 內存管理

1. new alloc copy retain這些對象我們都要主動的release或者 autorelease
2. 如果是類方法創建的對象,那么系統自動釋放池自動在適當的 時候會幫我們 release
3. ARC xcode 自動會幫我們人工智能的添加 release autorelease

2. C語言里的數組與OC數組的區別
OC 數組是一個對象,有大量的方法,c 沒有都需要自己寫 C 數組刪除是需要后面往前移動,oc 數組自動處理

3. 淺拷貝與深拷貝的區別 或者什么是深拷貝 什么是淺拷貝 copy, mutableCopy
@interface A {

B *b; }

淺拷貝只是拷貝對象本身,不會對里面的子對象進一步拷貝

?深拷貝會對子對象以及子對象的子對象進一步拷貝

4. 解釋 TCP/IP 協議 HTTP

TCP UDP

IP
TCP/IP
是網絡開發中常見的傳輸協議,他傳輸和 udp 相比是可靠 的。http 是基于 tcp/ip 的主要用戶互聯網的協議
所謂可靠是 tcp 傳輸對方會給一個 ACK 信號(確認信號)
tcp
傳輸不如 udp ,吞吐量不如 udp
tcp
是順序的,udp 是無序的
tcp
會保持連接,udp 不會保持連接
在我們 iOS 開發中用 http 較多。http 協議是一個被動式的

5. 界面之間傳值有哪幾種方法 單例,代理,直接賦值,通知中心/廣播, 數據庫等多種

6. 什么是 MVC 模式
Model, View, Controller, iOS 開發中的典型的設計模式。比如通 http 把網絡數據下載并解析然后存于自己的數據模型 Model , 然后通知 controller 去刷新界面,通過 controller Model View 進行關聯,這種模式就叫 mvc
這樣的好處是,可以隔離數據模型 model View 界面。遵循了低 耦合的設計思想.

7. 常見的點擊手勢有哪幾種
UIPinchGuesture, UITapGuesture, UISwipGuesture,

UILongPressGuesture, UIRotationGuesture

8. 瀑布流怎么理解和實現的

1. 如果簡單的來說, 3 tableview 就可以實現瀑布流,3 tableview 實現聯動滾動。
2.
其實最好的做法在 scrollview 上使用 3 個復用隊列,如果一種 一個 cell 超過屏幕,不能 release,而是把它回收到復用隊列中, 如果要創建一個 cell,首先從復用隊列中取一個,然后使用。

9. 你如何理解復用機制
一般是對 uiscrollview 做復用機制,因為 uiscrollview 滾動窗口沒 有復用,所以要做,原理就是超過屏幕的 view 不能銷毀,而要放 在復用隊列/池里面存放起來,然后以后要在scrollview顯示view 首先不要 alloc 創建,而要首先去復用池里面找有沒有可復用的 view,如果沒有就 alloc 如果有就直接用。

10. 類別的作用 類別是給已有的類添加方法,但是不能添加變量,匿名類別除外 ()

11. 類別和繼承什么區別
類別/類目/Category 很方便給現有類添加方法。但是不能添加成 員變量,匿名類除外,比如可以給 NSString 增加方法, UINavigationBar 增加方法,比如 SDWebImage UIImageView 加了 setImageWithURL:方法。類別對于使用者很方便

繼承可以給現有的類增加方法和成員變量。繼承對于使用者來 說不如類別方便 ,比如對 SDWebImage 如果用繼承的話,那么就 需要寫一個類似于 QFImageView 然后把所有的 UIImageView 改成

QFImageView,這里不如類別方便 12. C OC 有哪些基本數據類型

C char, short, int, struct, union, enum

NSString, nsarray, nsdictionary. 13.解釋多線程、NSThread NSOperationGCD

多線程在 iOS 用的很多,比如每個 asi 請求,sdwebimage 請求, 據請求等待等網絡數據處理,多線程/異步就是主要是為了界面流 ,防止界面假死。
每一個 ASI 請求就是一個 NSOperation

每一個 NSUrlConnnection 也是一個線程
Nsthread
是創建線程的一個通用的類。比如線程創建,取消, 始等。
Nsoperation
就是一個簡單的以任務為導向的多線程模型。目的是 為了不懂操作系統,不懂線程的人使用的
GCD
類似于 NSOperation, 是一個 blocks 版本的線程模型。

14. 什么是異步
相對于同步來說,單獨起一個或者多線程去處理 異步是一個概念 線程還是一個技術,異步就是用線程這種技術 實現的
比如界面下載數據,我們啟動一個異步任務 ASI 去網絡下載數據, 然后異步刷新界面,我們無需等待網絡數據下載完成.

15. 代理和協議什么區別

代理是一種概念,協議是一種技術,代理是用協議來實現的,代理 2 個對象之間通訊的一種方式。 代理主要做反向傳值的。實現系統的一些回調方法,比如 scrollview 滑動事件,選擇照片,asi 網絡下載完成等。

iOS 開發和 objective-c 區別
16. 代理和通知中心/廣播/NoficationCenter 什么區別

代理主要是反向傳值,一般用來 1:1 的兩個對象通訊上。

通知中心是通過注冊然后接收事件的一種 n:n(多對對) 的方法 17. UITextFieldUITextView 的區別

UITextField不能換行,UITextView可以換行。TextView可以點擊

字體放大,可以復制。相同的是他們都有代理類似 18. 怎么解析 HTML 源碼

一般 HTML 是通過 webview 來顯示的。一般簡單的 html 是通過 解析字符串來解析。沒有成熟現成 html 解析器。 一般服務器去抓取html解析html形成json xml文件供手機端讀 取。

19. Objective-C 如何和 javascript 通訊
Objective-c --à?javascript ---à?html 里面內容
Objective-c 是通過 stringByEvaluatingJavaScriptFromString 函數 來執行 html 中的 javascript
Javascript -à?url --à?objective-c 本地方法
需要通過 uiwebview 中的代理函數

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

20. 如何調用 iOS 打電話,發短信

[[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”tel://1543434”]]; [[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”sms://1572234”]]; [[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”mail://hello@hello.com”]];

[[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”http://1000phone.net”]];

21. 下拉刷新需要實現哪幾個方法,刷新流程
下來一般使用 EGORefresh 進行。原理是利用 scrollview 的反彈效 果把刷新 view 加載 scrollview 的負坐標上。通過代理方法去觸發。

22. 解釋 const, static, inline 關鍵字
const 修飾指針,或者常量,比如不可變,
static 修飾變量表示作用域,比如全局的私有變量,函數內部的 static 是內部的私有變量。
Static 修飾函數表示函數是文件作用域
Inline 表示內聯。一般來說 inline 需要和 static 聯合用 一般用法是 static inline int max(int a, int b) {

return a>b?a:b; }

static inline作用是和宏類似,只不過是方便調試(宏不能斷掉調 ,static inline 可以)。運行時候是一樣的。
一般 c/c++短小的函數都用 static inline 內聯函數

23. OC 里怎么實現多繼承

OC 沒有多繼承。用協議實現多繼承,把協議中的方法在實現的類 中重寫 C++有多繼承,多繼承其實用好了很方便。C++多繼承很容易出現 二一性比如:

A { int a;}
B: A,C:A
D : B, C那么 int a到底是繼承自誰的 單繼承

24.解釋KVCKVO
Key value coding, Key value observer.
Kvc 是路徑訪問的規范,kvo 是觀察某個變量的變化過程
KVO 可以觀察某個對象的變量變化過程,KVC 是滿足被觀察的編 碼規范。
KVC/KVO 類似于代理,通知中心。都是一種通訊方法。

25. 什么是單例模式 單例就是在多個對象之間共享數據,類似于全局變量,比如數據 庫打開一次,多個界面都可以使用

26. NSString *name = @”1000phone.com”,[name release]會出現什么 情況

這個代碼不滿足 objective-c 的內存管理黃金法則。沒有 alloc

release,
27. 列舉所知道的 iOS API

28. 列舉所知道的 iOS 的類
29. 列舉所知道的 iOS UI 控件
30. 解釋 C++/STL Listmapsetvector list =~ array
map =~ dictionary
set =~ nsset
vector =~ array
31. C/C++ OC 怎么混用

.m -> .mm

32. POST 請求的鏈接參數怎么拼接

POST 參數有 2 ,一種文件 POST 一種非文件 POST,對于非文 POST ( form-data/x-www-urlencoded ) name=xxx&id=22&sxx=33
對于文件 POST(multiple/form-data)

33. POST GET 有何區別
GET POST 都是 HTTP 請求方式的 2 中。
POST 是安全的。GET 是不安全的。GET 是放在瀏覽器中地址暴露 出來了。POST 不會。但是在 App GET POST 都看不見。 GET POST 都是和服務器提交參數/通訊的一種方式。
GET 參數不能太長<1024B POST 沒有限制<4G

GET 不能上傳文件, POST 可以上傳文件。 34. 本地存儲方式有哪幾種

數據庫,nsuserdefauts, file , plist,archieve 歸檔 比較小的就放在 nsuserdefaults(以文件設計的存放在 Libraray ) 數據庫里面適合存放一條一條的記錄
file 一般存普通文件,圖片,視頻,音頻等
plist 存放比 nsuserdefaults 大一些的
歸檔 nsarchieve 可以存對象

35.解釋OC里的id類型
id 是泛型指針,可以指向任何 oc 類型,
id =~ NSObject *
id objc_object typedef,執行 Class 對象

36. retaincopyreadonlyreadwrite 的區別
retain對計數器+1 copy是創建一個新對象,readonly只產生getter 函數,readwrite 產生 setter, getter 函數

37. copy 是深拷貝還是淺拷貝
copy 缺省是淺拷貝.但是 copy 也可以做成深拷貝

38. copy mutableCopy 區別
copy 是拷貝,mutableCopy 是可變拷貝,比如把 NSString 通過 mutableCopy NSMutableString, NSArray mutableCopy 變成 NSMutableArray.
NSString -à?NSMutableString, NSArrayà?NSMutableArray,

NSDictionaryà?NSMutableDictionary, NSData->NSMutableData; 39. 怎么實現對象的本地存儲

歸檔 NSArchieve
40. HTTP 協議、Socket 協議的區別


數據協議格式

編程

HTTP


ASI, NSUrlconnection

TCP 長連接

UDP

BSD Socket AsyncSocket

IP



HTTP 啟動一個 NSUrlConnection didFinish 長連接,長期的和服務器保持連接。目的是為了避免每次都要連 接。因為和服務器連接的過程非常復雜。也耗時。所以連接一次。 HTTP 短連接只要處理完就斷掉,下次重新連接 對服務器的負擔 .

?長連接對服務器壓力很大。

41. 什么是 Push Notification

42. 遍歷數組的三種方式有什么區別
for forin iterator
forin
也叫快速循環。為什么他叫快速循環,原因是速度快?為什

么速度快? 可以通過優化提前把 forin 里面的 array 數組數組全部

導入到 cpu cache 中。因為 cache 訪問速度把內存快至少 100 43. NSArray, NSDictionary 這些是如何做的?

NSArray 使用鏈表做的 NSDictionary 使用 hash 表做出來的 44. C++怎么調用 C 的方法

extern “C” int foo(){ };

45. Blocks 語法有什么優點
Blocks 類似于 c 中回調函數,和代理類似的,類似于 java 中的 listener 匿名函數

46. Frame bounds 有什么區別
Frame 是子視圖相對于父視圖的坐標系統,x y width height, bounds uiview 自己的坐標系統 bounds x y=0

47. 什么叫異步下載,怎么實現圖片的異步下載 48. 什么是緩存

49. ScrollView 的復用機制
滾動過程中把 scrollview 里面的 超出屏幕的 view 放在重用隊列中, 在滾動過程中如果有新的 view 進來,首先從重用隊列中取得 view, 如果沒有就新創建一個。
50. 什么是委托代理模式

委托代理是 2 個對象之間的一種通訊方式。一方使用協議,代理

另外一方實現協議,類似于回調,blocks 等語法。 目的是為了軟件設計的低耦合

51. 什么是通知中心 通知中心是多對多的平等的通訊模式。主要用在多個對象之間松 耦合的通訊模式。對象和對象之間通過通知的名字就可以進行關 聯通訊。

52.解釋關鍵字staticconstinline static inlinevolatile static 修飾變量表示靜態變量,根據作用域 不同
extern static 是相反的。
Static 修飾函數是表示函數在本文件有效

Static inline 聯合在一起表示內聯函數。類似于宏
Const
修飾變量和變量的內容只讀
Volatile
表示每次都從內存中真正的讀取。主要是用于嵌入式中, 讀取硬件。

53. 如何實現 2 個線程 一個線程+1 一個線程-1

int sum;
NSLock *sumLock; - (void) demo {

sumLock = [[NSLock alloc] init];
[NSThread detachNewThreadSelector:@selector(thread1:) toTarget:self withObject:nil]; [NSThread detachNewThreadSelector:@selector(thread2:) toTarget:self withObject:nil];

}
- (void) thread1:(id)arg {

while (1) { [sumLock lock];

sum++;
[sumLock unlock];

[NSThread sleepForTimeInterval:1]; }

}
- (void) thread2:(id)arg {

while (1) { [sumLock lock];

sum--;
[sumLock unlock];
[NSThread sleepForTimeInterval:0.5];

} }

54. OC 中有私有方法嗎?怎么實現
.m 文件中實現 Category,只是在.m 中方法

55. OC 中有私有成員變量嗎?怎么實現 .m 文件中實現匿名類別 Category

56. 成員變量的作用域有哪幾種 @public, @protected, @private

57. 數據庫能不能存圖片,怎么存?
可以存圖片, nsdata ,但是我們一般不這樣存,我們存路徑把 圖片存在沙盒中。

58. 線程之間怎么通信?
59.
線程生產者,消費者如何實現?

1 個線程是生產者,一個是消費者如何實現這個模型.

NSMutableArray *dataList; NSLock *dataLock;
- (void) produceAndConsume {

dataList = [[NSMutableArray alloc] init];
dataLock = [[NSLock alloc] init];
[NSThread detachNewThreadSelector:@selector(produce:) toTarget:self withObject:nil]; [NSThread detachNewThreadSelector:@selector(consume:) toTarget:self withObject:nil];

}
- (void) produce:(id)arg {

int index = 0; while (1) {

NSNumber *n = [NSNumber numberWithInt:index++]; [dataLock lock];
[dataList addObject:n];
[NSThread sleepForTimeInterval:0.5];

} }

- (void) consume:(id)arg { while (1) {

if ([dataList count] > 0) { [dataLock lock];

id obj = [dataList objectAtIndex:0]; [dataList removeObject:0]; [dataLock unlock];
NSLog(@"消費 obj %@", obj);

}

[NSThread sleepForTimeInterval:1]; }

}
60. 不同屏幕怎么適配

iphone, iphone3G, iphone3GS 320x480
iphone4, iphoen4S 640x960 retina
iphone5, iphone5S, 640x1136
寫程序需要有 2 套圖片 demo.png demo@2x.png iphone5 適配.

1136/2-44-49

[[UIScreen mainScreen] applicationFrame] = (320x460, 320x548) [[UIScreen mainScreen] bounds] = (320x480, 320x568)
iPad, iPad2, iPad Mini 1024x768
iPad3, iPad4, 2048x1563

61. 不同版本屏幕旋轉怎么適配 62. 內存警告應該怎么做

盡量多的釋放內存。把一些內容寫到文件中,不要保存在內存中。 63. iOS5, iOS6, iOS7 區別

64. NSNotification 是同步還是異步的

是同步的. 如果需要異步 必須使用 NSNotificationQueue 實現
A notification center delivers notifications to observers synchronously. In other words, the postNotification: methods do not return until all observers have received and processed the notification. To send notifications asynchronously use NSNotificationQueue.

In a multithreaded application, notifications are always delivered in the thread in which the notification was posted, which may not be the same thread in which an observer registered itself.

Hope it helps you.


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458562.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458562.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458562.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于MQTT協議進行應用開發

來自&#xff1a;http://www.cnblogs.com/secondtononewe/p/6073089.html 官方協議有句如下的話來形容MQTT的設計思想&#xff1a; “It is designed for connections with remote locations where a "small code footprint" is required or the network bandwidth i…

SortedDictionaryTKey,TValue正序與反序排序及Dicttionary相關

SortedDictionary<TKey,TValue>能對字典排序 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace SortDictionary {class Program{static void Main(string[] args){TestDictionarySort();…

DOS窗口的編碼頁從UTF-8調回GBK

2019獨角獸企業重金招聘Python工程師標準>>> 之前在DOS窗口操作MySQL數據庫的時候&#xff0c;將編碼頁從GBK設置成了UTF-8&#xff0c;解決了在DOS窗口顯示MySQL數據庫中的表中的中文字符出現亂碼的問題。但是除此之外&#xff0c;DOS窗口顯示的其他中文字符都是亂…

UIBezierPath

學習UIBezierPath畫圖 筆者在寫本篇文章之前&#xff0c;也沒有系統學習過貝塞爾曲線&#xff0c;只是曾經某一次的需求需要使用到&#xff0c;才臨時百度看了一看而且使用最基本的功能。現在總算有時間停下來好好研究研究這個神奇而偉大的貝塞爾先生&#xff01; 筆者在學習時…

系統架構設計理論與原則

一、無共享架構 1、無共享架構 無共享架構是一種分布式計算架構&#xff0c;這種架構中不存在集中存儲的狀態&#xff0c;系統中每個節點都是獨立自治的&#xff0c;整個系統中沒有資源競爭&#xff0c;這種架構具有非常強的擴張性&#xff0c;目前在web應用中被廣泛使用。 無共…

VS2010 教程:創建一個 WPF 應用程序 (第一節)

來自&#xff1a;https://msdn.microsoft.com/zh-cn/library/ff629048.aspx [原文發表地址] VS2010 Tutorial: Build a WPF App (Step 1) [原文發表時間] Friday, May 22, 2009 8:00 AM 這篇文章里&#xff0c;我將使用VS2010 Beta 1創建一個WPF 應用程序。并且 我將展示這個產…

js 日期星期 帶農歷

Weekday代碼 //得到當前日期如2009年6月19日 星期五 function getDate(){ var today new Date(); var x new Array("星期日", "星期一", "星期二","星期三","星期四", "星期五","星期六"…

FMDB的使用

// // FMDBmanager.h // database // // Created by PRL on 16/10/13. // Copyright © 2016年PRL. All rights reserved. // #import <Foundation/Foundation.h> interface FMDBmanager : NSObject{ FMDatabase * _db; } (FMDBmanager *)sharedManager; //獲取…

深入淺出WPF之Binding的使用(一)

from: http://www.cnblogs.com/akwwl/p/3421005.html 在WPF中Binding可以比作數據的橋梁&#xff0c;橋梁的兩端分別是Binding的源&#xff08;Source&#xff09;和目標&#xff08;Target&#xff09;。 一般情況下&#xff0c;Binding源是邏輯層對象&#xff0c;Binding目…

arm處理器中a5 a8 a9,v6 v7,arm7 arm9 arm11都是依據什么來分類的【轉】

轉自&#xff1a;http://blog.csdn.net/maochengtao/article/details/9951131ARM處理器發展這么多年&#xff0c;有很多架構&#xff0c;很多不同的內核 架構有armv1 v2 v3 v4 v5 v6 v7 內核太多了&#xff0c;比如armv1對應的是arm1&#xff0c;armv5對應的arm9&#xff0c;ar…

前端開發一些很有用的工具

apiview.com 接口規范管理平臺 restClient 谷歌瀏覽器接口測試工具 postman 接口測試工具 SSH Secure Shell Client 抓包工具 SSH SecureFile Transfer Client wireshark 抓包分析工具 Xshell linux遠程工具 Balsamiq Mockups 原型圖 visio 流程圖 xmind top圖 SourceCounter、…

所有的iPhone設備cell的寬度都是320,解決辦法是?

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { self.frameCGRectMake(0, 0, SW, 44); } return self; } 自己重設一下寬度就行了

深入淺出WPF之Binding的使用(二)

from: http://www.cnblogs.com/akwwl/p/3421250.html 在上一篇中介紹了Binding的基本綁定方法&#xff0c;這一篇中我們在深入的介紹Binding的其他用法。 Binding的源也就是數據的源頭&#xff0c;在日常的工作中&#xff0c;除了使用像上一篇中的Student對象作為數據源外&a…

iOS 推送

最近在研究ios的推送問題&#xff0c;遇到了一些問題&#xff0c;最終整理了一下。放在這里和大家分享APNS的推送機制首先我們看一下蘋果官方給出的對ios推送機制的解釋。如下圖 Provider就是我們自己程序的后臺服務器&#xff0c;APNS是Apple Push Notification Service的縮寫…

Bash判斷文件夾(目錄)是否存在

1 #!/bin/bash 2 if [ -d DirName ]; then 3 echo Dir exist 4 else 5 echo Dir not exist 6 fi 轉載于:https://www.cnblogs.com/imzye/p/5059031.html

iOS 加載本地html文件詳細操作

webView的加載&#xff0c;如果是純文本&#xff0c;有內部樣式的話&#xff0c;簡單的加載請求就可以了。如下: 這種加載簡單直接&#xff0c;易操作。 如果需要加載images&#xff0c;css文件 需要把xcode的項目請求路徑的位置告訴webView.代碼如下&#xff1a; 這樣html文件…

HDU 5573 Binary Tree 構造

Binary Tree題目連接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid5573 Description The Old Frog King lives on the root of an infinite tree. According to the law, each node should connect to exactly two nodes on the next level, forming a full binary…

志邦櫥柜坑爹,志邦櫥柜大忽悠,志邦櫥柜欺騙

本人實實在在經歷的&#xff0c;志邦櫥柜就是個大忽悠,志邦櫥柜沒誠信!! 志邦櫥柜先騙客戶下訂單,在預算時低開,到真正簽合同時&#xff0c;不僅僅尺寸坑你,一大堆增項都會出來,原本1.5w預算到最后簽合同總價到2.2w,簽合同增項高開最后志邦櫥柜總價超預算非常非常離譜&#xff…

多線程的那點兒事(之讀寫鎖)

在編寫多線程的時候&#xff0c;有一種情況是十分常見的。那就是&#xff0c;有些公共數據修改的機會比較少。相比較改寫&#xff0c;它們讀的機會反而高的多。通常而言&#xff0c;在讀的過程中&#xff0c;往往伴隨著查找的操作&#xff0c;中間耗時很長。給這種代碼段加鎖&a…

iOS獲取設備IP

獲取iOS設備IP wifi和流量環境下 在網上找的比較好的獲取ip的代碼 #include <ifaddrs.h> #include <arpa/inet.h> #include <net/if.h> #define IOS_CELLULAR "pdp_ip0" #define IOS_WIFI "en0" #define IOS_VPN …