希望讀者帶著批評的眼光,別誤導了您!本人才疏學淺,略做記錄,您有更好答案,請您指教!
1. 如何實現應用第一次啟動時的使用向導?
這個可以理解為每次版本高更新時,第一次打開首先顯示的應該是引導畫面。
在AppDelegate.m文件中實現判斷
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//在此處判斷是否為新版本是否為第一次登陸
//如果是第一次登陸,將rootViewController設置為引導控制器
self.window.rootViewController = NewFeatureController;
}
2. 如何實現一個自定義視圖,給定一個NSArray的坐標點數組,在視圖上顯示對應的曲線。
相關知識: 繪制 文字、圓、直線、弧線、矩形、扇形、橢圓、三角形、圓角矩形、貝塞爾曲線、圖片)
CGContextRef:Graphics Context是圖形上下文,可以將其理解為一塊畫布,我們可以在上面進行繪畫操作,繪制完成后,將畫布放到我們的view中顯示即可,view看作是一個畫框.
需要重寫:- (void)drawRect:(CGRect)rect 方法。
附上文章一篇 寫的非常好!
3. 如何為一個TextField控件加入自定義的邊框?
1.重寫一個文本將
2.簡單的方法:
self.background = [UIImage imageNamed:@"searchbar_textfield_background"];
其他的一些屬性
設置邊框樣式
[textField setBorderStyle:UITextBorderStyleNone];
設置邊框顏色
textField.layer.borderColor = [[UIColor redColor]CGColor];
//設置UITextField的文字顏色
tf.textColor=[UIColor redColor];
//設置UITextField的文本框背景顏色
tf.backgroundColor=[UIColor grayColor];
//設置UITextField的邊框的風格
tf.borderStyle=UITextBorderStyleRoundedRect;
//設置UITextField的代理
tf.delegate=self;
//設置UITextField的文字對齊方式
tf.textAlignment=UITextAlignmentCenter;//居中對齊
tf.textAlignment=UITextAlignmentLeft;//左對齊
tf.textAlignment=UITextAlignmentRight;//右對齊
tf.textAlignment=UITextAlignmentFill;//填充對齊
//設置UITextField的文字大小和字體
tf.font=[UIFont fontWithName:@"Times New Roman" size:20];
//設置UITextField自適應文本框大小
tf.adjustsFontSizeToFitWidth=YES/NO;//自適應寬度
tf.adjustsFontSizeToFitHeight=YES/NO;//自適應高度
//設置UITextField是否擁有一鍵清除的功能
tf.clearsOnBeginEditing=YES/NO;
//設置一鍵清除按鈕是否出現
tf.clearButtonMode=UITextFieldViewModeNever;
//設置UITextField的初始隱藏文字
tf.placeholder=@"輸入密碼";
//當UITextField的樣式為UITextBorderStyleNone的時候,修改背景圖片
tf.background=[UIImage imageNamed:@"xx.png"];
//設置UITextField的左邊view
tf.leftView=xxx;
//設置UITextField的左邊view出現模式
tf.leftViewMode=UITextFieldViewModeAlways;
//設置UITextField的右邊view
tf.rightView=xxx;
//設置UITextField的右邊view出現模式
tf.rightViewMode=UITextFieldViewModeAlways;
//設置UITextField的字的擺設方式
tf.contentVerticalAlignment=UIControlContentVerticalAlignmentCenter;
4. 分析給出某個頁面界面的實現方式?注意屏幕旋轉等的處理。
這里解答一下屏幕旋轉的問題吧!
如何獲取:
1.注冊UIDeviceOrientationDidChangeNotification通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientChange:)name:UIDeviceOrientationDidChangeNotification object:nil];
- (void)orientChange:(NSNotification *)noti
{
NSDictionary* ntfDict = [noti userInfo];
UIDeviceOrientation orient = [UIDevice currentDevice].orientation;
/*
UIDeviceOrientationUnknown,
UIDeviceOrientationPortrait, // Device oriented vertically, home button on the bottom
UIDeviceOrientationPortraitUpsideDown, // Device oriented vertically, home button on the top
UIDeviceOrientationLandscapeLeft, // Device oriented horizontally, home button on the right
UIDeviceOrientationLandscapeRight, // Device oriented horizontally, home button on the left
UIDeviceOrientationFaceUp, // Device oriented flat, face up
UIDeviceOrientationFaceDown // Device oriented flat, face down */
switch (orient)
{
case UIDeviceOrientationPortrait:
break;
case UIDeviceOrientationLandscapeLeft:
break;
case UIDeviceOrientationPortraitUpsideDown:
break;
case UIDeviceOrientationLandscapeRight:
break;
default:
break;
}
}
2.注冊UIApplicationDidChangeStatusBarOrientationNotification通知,以來stausBar
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarOrientationChange:)name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
- (void)statusBarOrientationChange:(NSNotification *)notification
{
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if (orientation == UIInterfaceOrientationLandscapeRight) // home鍵靠右
{
//
}
if (
orientation ==UIInterfaceOrientationLandscapeLeft) // home鍵靠左
{
//
}
if (orientation == UIInterfaceOrientationPortrait)
{
//
}
if (orientation == UIInterfaceOrientationPortraitUpsideDown)
{
//
}
}
5. 如何同時為iPad和iPhone做屏幕適配?
AutoLayout,sizeClass
開源框架:Masonry
6. 繼承和協議、category是怎么回事?可以同其他語言做類比嗎(比如Java或C++)?類似[a b]的消息調用,運行時是如何確定b的?
繼承是繼承的子類擁有父類的方法和屬性
private:私有成員,不能被子類繼承;
protected:保護成員,可以被子類繼承;
public:公有成員,可以被外部函數訪問,也可以被子類繼承。
可以重寫父類方法
協議是Delegate:只要某個類遵守了這個協議,就擁有了這個協議中的所有方法聲明。例如一個view向另一個view傳值。
Category是分類:是為了擴展已有類的新的行為。例如給NSString添加生成時間戳的方法。
7. 代碼塊(block)是怎么回事?代碼塊是對象嗎?要如何理解呢?
8. 使用過NSThread嗎?要如何使用?GCD是怎么回事?
NSThread和GCD都是多線程。
GCD 是一個替代諸如 NSThread 等技術的很高效和強大的技術,利用GCD可以實現多線程。
例如利用GCD多線程可以解決頁面UI與網絡下載的阻塞問題(UITableviewCell)。
9. 怎么編寫庫?進行組件/代碼復用的庫有何注意事項?如何使用C/C++開發的庫?有何注意事項?
在分享一篇文章他們寫的比我寫的好。
10.Socket是否使用過?TCP和UDP區別是什么?單播、組播、廣播分別是什么?
區別
1.基于連接與無連接;
2.對系統資源的要求(TCP較多,UDP少);
3.UDP程序結構較簡單;4.流模式與數據報模式 ;
5.TCP保證數據正確性,UDP可能丟包,TCP保證數據順序,UDP不保證。
1.單播:網絡節點之間的通信就好像是人們之間的對話一樣。如果一個人對另外一個人說話,那么用網絡技術的術語來描述就是“單播”,此時信息的接收和傳遞只在兩個節點之間進行。單播在網絡中得到了廣泛的應用,網絡上絕大部分的數據都是以單播的形式傳輸的,只是一般網絡用戶不知道而已。例如,你在收發電子郵件、瀏覽網頁時,必須與郵件服務器、Web服務器建立連接,此時使用的就是單播數據傳輸方式。但是通常使用“點對點通信”(Point to Point)代替“單播”,因為“單播”一般與“多播”和“廣播”相對應使用。
2.多播:“多播”也可以稱為“組播”,在網絡技術的應用并不是很多,網上視頻會議、網上視頻點播特別適合采用多播方式。因為如果采用單播方式,逐個節點傳輸,有多少個目標節點,就會有多少次傳送過程,這種方式顯然效率極低,是不可取的;如果采用不區分目標、全部發送的廣播方式,雖然一次可以傳送完數據,但是顯然達不到區分特定數據接收對象的目的。采用多播方式,既可以實現一次傳送所有目標節點的數據,也可以達到只對特定對象傳送數據的目的。 IP網絡的多播一般通過多播IP地址來實現。多播IP地址就是D類IP地址,即224.0.0.0至239.255.255.255之間的IP地址。Windows 2000中的DHCP管理器支持多播IP地址的自動分配。
3.廣播:“廣播”在網絡中的應用較多,如客戶機通過DHCP自動獲得IP地址的過程就是通過廣播來實現的。但是同單播和多播相比,廣播幾乎占用了子網內網絡的所有帶寬。拿開會打一個比方吧,在會場上只能有一個人發言,想象一下如果所有的人同時都用麥克風發言,那會場上就會亂成一鍋粥。集線器由于其工作原理決定了不可能過濾廣播風暴,一般的交換機也沒有這一功能,不過現在有的網絡交換機(如全向的QS系列交換機)也有過濾廣播風暴功能了,路由器本身就有隔離廣播風暴的作用。 廣播風暴不能完全杜絕,但是只能在同一子網內傳播,就好像喇叭的聲音只能在同一會場內傳播一樣,因此在由幾百臺甚至上千臺電腦構成的大中型局域網中,一般進行子網劃分,就像將一個大廳用墻壁隔離成許多小廳一樣,以達到隔離廣播風暴的目的。 在IP網絡中,廣播地址用IP地址“255.255.255.255”來表示,這個IP地址代表同一子網內所有的IP地址。
11. http POST和GET的差異?http和https有何不同?
Get:相對不安全 , 參數在url后面,傳輸長度小
Post:相對安全,參數在請求體中,傳輸的長度相比較長
http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。http的連接很簡單。
HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。
在ios9中,要求使用https協議。但也可以不適用。
12. 是否使用過自動化測試框架?介紹一下。
什么是證書,有哪些種類?如何做app簽名?如何進行testflight發布測試?
證書是開發者購買的測試和發布應用程序的簽名文件。
有個人開發者證書($99)和企業開發證書($299)
在蘋果開發整中心生成相關p12文件進行測試和發布應用程序。
14. Svn里的conflict是怎么回事?如何處理?
多人協作時,修改同一句或一段代碼,更新或提交時會造成沖突。可以對沖突進行合并。刪除沖突,重新提交。