1.OC里用到集合類是什么盾致?
基本類型為:NSArray顶瞒,NSSet以及NSDictionary
可變類型為:NSMutableArray,NSMutableSet以及NSMutableDictionary
2.用OC寫一個快速排序
-(void)quickSortWithArray:(NSMutableArray *)aDataleft:(NSInteger)left right:(NSInteger)right{
if (right >left) {
NSInteger i= left;
NSInteger j= right + 1;
while(true) {
while(i+1 < [aData count] && [aData objectAtIndex:++i] < [aDataobjectAtIndex:left]) ;
while(j-1 > -1 && [aData objectAtIndex:--j] > [aDataobjectAtIndex:left]) ;
if (i>= j) {
break;
}
[selfswapWithData:aData index1:i index2:j];
}
[selfswapWithData:aData index1:left index2:j];
[selfquickSortWithArray:aData left:left right:j-1];
[selfquickSortWithArray:aData left:j+1 right:right];
}
}
-(void)swapWithData:(NSMutableArray *)aData index1:(NSInteger)index1index2:(NSInteger)index2{
NSNumber *tmp =[aData objectAtIndex:index1];
[aDatareplaceObjectAtIndex:index1 withObject:[aData objectAtIndex:index2]];
[aDatareplaceObjectAtIndex:index2 withObject:tmp];
}
3.viewController中didReceiveMemoryWarning什么時候調(diào)用茅撞,默認如何處理
在程序收到內(nèi)存警告的時候會調(diào)用該方法
默認操作為檢查controller是否可以安全地釋放它的view)鸯隅,比如view本身沒有superview并且可以被很容易地重建(通過nib或者loadView函數(shù))
4.OC中frame與bounds有什么不同
Frame指的是:該view在父view坐標系統(tǒng)中的位置和大小(參照點是父類的坐標系統(tǒng))
Bounds指的是:該view在本身坐標系統(tǒng)中的位置和大兴途亍(參照點是本身的坐標系統(tǒng))
5.OC中有無多重繼承站宗,如何實現(xiàn)多重繼承
沒有多重繼承。
cocoa中所有的類都是NSObject的子類益愈,多繼承在這里是用protocol協(xié)議來實現(xiàn)的梢灭,所以我們不用去考慮繁瑣的多繼承、虛基類的概念蒸其,多態(tài)特性在oc中拖過委托來實現(xiàn)敏释。
6.用OC寫兩個線程,對同一個變量分別進行+/-操作
//首先創(chuàng)建一個線程鎖
NSLock*_lock=
[[NSLockalloc]init];
//創(chuàng)建兩個工作線程訪問同一個資源類的對象的變量_value
[NSThreaddetachNewThreadSelector:@selector(thread1:)toTarget:selfwithObject:@(10)];
[NSThreaddetachNewThreadSelector:@selector(thread2:)toTarget:selfwithObject:@(10)]摸袁;
}
//第一個工作線程中會調(diào)用的函數(shù)
- (void)thread1:(id)obj{
//我們需要當前線程對_value進行連續(xù)+10的操作每次遞增10
@autoreleasepool{
intnum = [objintValue];
[_locklock];//加鎖修改之前加鎖
for(inti =0; i < num; i++) {
_value+=10;
NSLog(@"thread1_value:%d",_value);
[NSThreadsleepForTimeInterval:0.5];
}
[_lockunlock];//修改完畢要解鎖
}
}
//第二個線程中調(diào)用的函數(shù)
- (void)thread2:(id)obj{
@autoreleasepool{
intnum = [objintValue];
[_locklock];//加鎖
for(inti =0; i < num; i++) {
_value-=10;
NSLog(@"thread2_value:%d",_value);
}
[_lockunlock];//解鎖
}
}
7.OC中如何創(chuàng)建一個線程钥顽,要求可以一直工作,不會只執(zhí)行一次就結(jié)束
@synthesize name;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additionalsetup after loading the view, typically from a nib.
NSThread *thread =[[NSThread alloc]initWithTarget:self selector:@selector(threadFunc)object:nil];
[thread start];
}
static bool over = NO;
- (void)threadFunc
{
NSAutoreleasePool *pool =[[NSAutoreleasePool alloc]init];
while (YES) {
@synchronized(name){
name =@"Frank";
[NSThreadsleepForTimeInterval:2];
if ([NSThreadisMultiThreaded]) {
NSLog(@"%@isMultiThreaded",name);
}
if (over) {
break;
}
}
}
[pool release];
}
8.在7的基礎(chǔ)上如何結(jié)束一個線程
a)break靠汁;
b)[thread cancel]
9.寫一個你所經(jīng)歷的項目架構(gòu)或者cocoa里面的mvc模式
二.c/c++
1.得到一個field在結(jié)構(gòu)體中的偏移量
#define OFFSETOF(type, field)?((size_t)&(((type *)0)->field))
2.引用和指針的區(qū)別
1 .從現(xiàn)象上看:指針在運行時可以改變其所指向的值蜂大,而引用一旦和某個對象綁定后就不再改變。引用訪問一個變量是直接訪問蝶怔,而指針是間接訪問奶浦。
2.從內(nèi)存分配上看:程序為指針變量分配內(nèi)存區(qū)域,而引用不分配內(nèi)存區(qū)域
3.從編譯上看:程序在編譯時分別將指針和引用添加到符號表上踢星,符號表上記錄的是變量名及變量所對應地址澳叉。指針變量在符號表上對應的地址值為指針變量的地址值,而引用在符號表上對應的地址值為引用對象的地址值沐悦。符號表生成后就不會再改成洗,因此指針可以改變指向的對象(指針變量中的值可以改),而引用對象不能改
3.寫出float X與零值比較的if語句
const double EPSILON = 1.00e-07;
if (x
4.如何引用一個已經(jīng)定義過的全局變量
可以用引用頭文件的方式藏否,也可以用extern關(guān)鍵字的方式來引用定義過的全局變量
5.static全局變量與普通的區(qū)別瓶殃,局部變量呢?函數(shù)呢副签?
static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次遥椿,防止在其他文件單元中被引用;
static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值继薛;
static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份修壕,普通函數(shù)在每個被調(diào)用中維持一份拷貝
6.隊列和棧的區(qū)別
棧(Stack)是限定只能在表的一端進行插入和刪除操作的線性表。
隊列(Queue)是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表遏考。
1.隊列先進先出慈鸠,棧先進后出。
2.對插入和刪除操作的"限定"。棧是限定只能在表的一端進行插入和刪除操作的線性表青团。隊列是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表譬巫。
3.遍歷數(shù)據(jù)速度不同。隊列遍歷數(shù)據(jù)的速度要快得多督笆。
7.寫一個單鏈表要求可以插入數(shù)據(jù)和刪除單個數(shù)據(jù)
#include
#include
typedef struct Node//定義節(jié)點
{
int data;//可以為其他類型
struct Node *next;
}List;
void create(struct Node
*&L,int a[],int n) //創(chuàng)建芦昔,L是鏈表頭,a是要插入數(shù)組,n是要插入元素個數(shù)
{
List *s; int i; L=(List*)malloc(sizeof(List));
L->next=NULL;
for(i=0;i
s=(List *)malloc(sizeof(List));
s->data=a[i];
s->next=L->next;L->next=s;
}
}
int insert(List *&L,int i,int e)//插入,i是插入位置娃肿,e是插入的值
{
int j=0;
List *p=L,*s;
while(j
j++;
p=p->next;
}
if(p==NULL)
return 0;
else {
s=(List *)malloc(sizeof(List));
s->data=e;
s->next=p->next;
p->next=s; return 1;
}
}
int delete(List
*&L,int i,int &e)//i是要刪除元素的位置咕缎,e保存被刪除元素的值
{
int j=0;
List *p=L,*q;
while(j
j++; p=p->next;
}
if(p==NULL)
return 0;
else {
q=p->next;
if(q==NULL)
return 0;
e=q->data;
p->next=q->>next;
free(p);
return 1;
}
}
班德爾筆試題。
1你是怎么理解delegate料扰,舉例如何使用
delegate就是委托/代理凭豪,是iOS設(shè)計模式中的代理設(shè)計模式
比如UI中的UITextField控件,當鍵盤彈起時UItextField自己是不會收鍵盤的晒杈,這個時候我們可以遵守UItextFieldDelegate協(xié)議嫂伞,設(shè)置UITextField的代理,當點擊return鍵時委托代理收鍵盤
2拯钻,讓你做個相冊你會怎么做
用UIScrollView做一個九宮格顯示照片縮略圖帖努,然后點擊進入之后用UIScrollView左右滾動顯示大圖,單擊圖片還可以放大
3怎樣自定義一個uiTabbarController
用UIView做一個tabBar然后在這個UIView上粘貼label和button通過點擊button來控制切換的視圖控制器
4你用過動畫效果嗎粪般?請舉例說明
實現(xiàn)iOS漂亮的動畫效果主要有兩種方法拼余,
一種是UIView層面的,
一種是使用CATransition進行更低層次的控制刊驴,
第一種是UIView姿搜,UIView方式可能在低層也是使用CATransition進行了封裝寡润,它只能用于一些簡單的捆憎、常用的效果展現(xiàn),這里寫一個常用的示例代碼梭纹,供大家參考躲惰。
[UIView
beginAnimations:@"Curl"context:nil];//動畫開始
[UIViewsetAnimationDuration:0.75];
[UIViewsetAnimationDelegate:self];
[UIViewsetAnimationTransition:UIViewAnimationTransitionCurlUp forView:myviewcache:YES];
[myviewremoveFromSuperview];
[UIViewcommitAnimations];
第二種方式相對復雜一些,但如果更好的進行控制变抽,還是使用這種方法吧础拨,
基本使用方法可以看一下如下例子:
CATransition*animation = [CATransition animation];
[animationsetDuration:1.25f];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseIn]];
[animationsetType:kCATransitionReveal];
[animationsetSubtype: kCATransitionFromBottom];
[self.view.layer
addAnimation:animation forKey:@"Reveal"];
5,實現(xiàn)一個Cell要有標題和內(nèi)容
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
staticNSString*
cellId =@"cellID";
UITableViewCell*cell = [tableViewdequeueReusableCellWithIdentifier:cellIdforIndexPath:indexPath];
if(cell ==nil) {
cell = [[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:cellId]autorelease];
}
cell.textLabel.text= [NSStringstringWithFormat:@"第%d行",indexPath.row];
cell.detailTextLabel.text= [_dataArrayobjectAtIndex:indexPath.row];
returncell;
}
6解釋一下http绍载,如何下載一張圖片代碼實現(xiàn)
超文本傳輸協(xié)議(英文:HyperText Transfer
Protocol诡宗,縮寫:HTTP)是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。
7.簡述對view击儡,viewcontroller,
calayer和window的理解
UIView:屬于UIkit.framework框架,負責渲染矩形區(qū)域的內(nèi)容,為矩形區(qū)域添加動畫,響應區(qū)域的觸摸事件,布局和管理一個或多個子視圖UIWindow:屬于UIKit.framework框架,是一種特殊的UIView,通常在一個程序中只會有一個UIWindow,但可以手動創(chuàng)建多個UIWindow,同時加到程序里面塔沃。UIWindow在程序中主要起到三個作用:
1、作為容器,包含app所要顯示的所有視圖2阳谍、傳遞觸摸消息到程序中view和其他對象3蛀柴、與
UIViewController協(xié)同工作,方便完成設(shè)備方向旋轉(zhuǎn)的支持
CAlayer:屬于QuartzCore.framework,是用來繪制內(nèi)容的,對內(nèi)容進行動畫處理依賴與UIView來進行顯示,不能處理用戶事件螃概。UIView和CALayer是相互依賴的,UIView依賴CALayer提供內(nèi)容,CALayer依賴UIView一共容器顯示繪制內(nèi)容。延伸:?UIViewController:管理視圖的幾成熟,每個視圖控制器都有一個自帶的視圖,并且負責這個視圖相關(guān)的一切事務鸽疾。方便管理視圖中的子視圖,負責model與view的通信;檢測設(shè)備旋轉(zhuǎn)以及內(nèi)存警告;是所有視圖控制類的積累,定義了控制器的基本功能吊洼。
福昕軟件面試題ios
一、Objective – C及面向?qū)ο蠡A(chǔ)(30分)
1.Objective-C中有無私有成員制肮?有無私有方法冒窍?如何區(qū)分類方法和實例方法?
objective-c類里面的方法只有兩種,類方法和實例方法.但是可以通過把方法的聲明和定義都放在.m文件中來實現(xiàn)一個表面上的私有方法豺鼻。有私有變量,可以通過@private來修飾,或者把聲明放到.m文件中超燃。在Objective‐C中,所有實例變量默認都是私有的,所有實例方法默認都是公有的+開頭是類方法–開頭是實例方法
2.Block與函數(shù)有何異同?block有何優(yōu)點拘领?
Block是沒有名字的匿名函數(shù)意乓,類似于C語言中的函數(shù)指針,可以作為參數(shù)進行傳遞用于回調(diào)约素,block可以定義在方法中届良,函數(shù)一般不可以這樣定義,
Block語法簡介圣猎,可以在方法中定義實現(xiàn)士葫,可以方法訪問內(nèi)部的局部變量使代碼更加緊湊結(jié)構(gòu)化
3.Objective-C中發(fā)送消息(如,[object message]),與c++成員方法或者是c的成員方法調(diào)用送悔,有何區(qū)別和聯(lián)系慢显?
OC中的發(fā)送消息實際上就是調(diào)用方法消息就是方法
發(fā)送消息的過程就是執(zhí)行方法的過程
OC的實例方法需要要對象指針調(diào)用,而c的函數(shù)或者c++方法不需要
4.以下代碼有什么問題欠啤?(5分)
(將一個int類型的參數(shù)轉(zhuǎn)換為NSNumber類型荚藻,并返回)
-(NSNumber *)number:(int)num
{
return[[NSNumber alloc]initWithInt:num];
}
代碼中應該用autorelease進行自動釋放
5.有如下兩個類Class A和Class
B的聲明和實現(xiàn):(10分)
@interface Class A:NSObject
-(void)print;
@end
@implementation Class A
-(void)print
{
NSLog(“this isClass A”);
}
@interface Class B:NSObject
-(void)print洁段;
@end
@implementation Class B
-(void)print
{
NSLog(“this isClass B”);
}
問:以下代碼中应狱,變量obj調(diào)用print時,輸出的結(jié)構(gòu)各是多少祠丝?是否相同疾呻,為什么會出現(xiàn)這樣的結(jié)果?
idobj = nil写半;
obj
= [[Class A alloc]init]岸蜗;
[objprint];
[objrelease];
obj
= [[Class B alloc]init];
[objprint];
[objrelease];
Obj= nil;
結(jié)果:this is Class Athis is Class B
因為首先obj執(zhí)行的時ClassA類的對象叠蝇,所以調(diào)用的方法是ClassA類的實例方法print然后又對obj重新賦值指向了ClassB類的對象這時調(diào)用的ClassB類的print
二璃岳、計算機數(shù)據(jù)結(jié)構(gòu)及算法基礎(chǔ)(30分)
1.說明UIViewController類成員函數(shù):
InitWithNibName:boundle;/dealloc/loadView/viewDidLoad/viewDidUnload調(diào)用順序,每個方法應該做的工作是什么矾睦?(5分)
1.InitWithNibName:boundle:
初始化UIViewController晦款,執(zhí)行關(guān)鍵數(shù)據(jù)初始化操作
2.loadView:當訪問UIViewController的view屬性時,view如果此時是nil枚冗,那么VC會自動調(diào)用loadView方法來初始化一個UIView并賦值給view屬性
3.viewDidLoad:當VC的view對象載入內(nèi)存后調(diào)用缓溅,用于對view進行額外的初始化操作
4.viewDidUnload:
在VC的view對象從內(nèi)存中釋放之后調(diào)用,可以在view被釋放后做一些view相關(guān)的引用清理操作赁温,此時view為nil坛怪。在iOS6.0開始就廢棄了,該方法不再會調(diào)用
5.dealloc:UIViewController對象銷毀的時候調(diào)用
2.說明UiView類屬性frame/center/bounds的聯(lián)系與區(qū)別股囊,改變bounds的值會不會對frame和center造成改變袜匿;
Frame指的是:該view在父view坐標系統(tǒng)中的位置和大小(參照點是父類的坐標系統(tǒng))
Bounds指的是:該view在本身坐標系統(tǒng)中的位置和大兄烧睢(參照點是本身的
Center:相對于父視圖坐標系的中心點坐標
改變bounds的值不會對frame和center造成改變
3.清說明計算機中棧和堆得含義及他們的用途(5分)居灯;
4.說說快速排序算法的基本思路或過程;
5.不用存取器的方法内狗,重寫TestClass類:(10分)
@interface TestClass :NSObject{
NSString *str;
}
@property(retain)NSString *str;
@end
@implementation TestClass
@synthesize str = _str;
@end
答:
@interface TestClass :NSObject{
NSString*str;
}
-(void)setStr:(NSString *)str;
-(NSString *)str;
@end
@implementation TestClass
-(void)setStr:(NSString *)str{
if(str!=_str){
[_str release];
_str = [str retain];
}
}
-(NSString *)str{
return[ str autorelease];
}
@end
九州瑞研招聘
知識面HR
HumanResource
1.說所你了解以及日常使用的版本控制系統(tǒng)怪嫌,以及它們的優(yōu)缺點
SVN優(yōu)點:除包括了CVS的大多數(shù)特點外,還有一些如:文件目錄可以方便的改名柳沙、基于數(shù)據(jù)庫的版本庫岩灭、操作速度提升、權(quán)限管理更完善等功能非常好用赂鲤。
SVN缺點:代碼庫不是分布式噪径,而是集中在一個地方,所以導致跨國訪問的時候速度很慢数初,遠程發(fā)開非常不利找爱。其次由于代碼庫只有一份,特別是元數(shù)據(jù)都存在服務器上妙真,所以當服務器崩潰的時候損失嚴重缴允。
GIT優(yōu)點:是免費、開源珍德、它采用了分布式版本庫的方式,不必服務器端軟件支持矗漾,使源代碼的發(fā)布和交流極其方便锈候。每一個GIT克隆都是一個完整的文件庫,含有全部歷史記錄和修訂追蹤能力敞贡。其最大特色就是“分支”及“合并”操作快速泵琳、簡便。支持離線工作,GIT是整個項目范圍的原子提交获列,而且GIT中的每個工作樹都包含一個具有完整項目歷史的倉庫谷市。
GIT缺點:對windows以及中文的支持不是很好。
2.你通常以怎樣的數(shù)據(jù)格式跟服務端做數(shù)據(jù)交換
JSON击孩、XML,
Sbjson/touchjson/開源庫
Gdata,
http
3.寫下你掌握的其他編程語言
C迫悠、C++、C#巩梢、JAVA创泄、PHP、Ruby括蝠、
javascript, Lua鞠抑,Python等
4.你了解的第三方庫,常用哪些Framework
ASIHTTPRrequest忌警、TXML搁拙、TouchJSON、MBProgressHUD法绵、EGOTableViewPullRefresh感混、FMDB、ZBarSDK礼烈、MinZIP
5.你了解的設(shè)計模式
MVC設(shè)計模式
單例模式
代理模式
通知模式
工廠模式
適配器模式
簡單介紹集中設(shè)計模式:
1)模型視圖控制器(MVC)弧满。控制器負責行為此熬,模型提供數(shù)據(jù)源庭呜,視圖顯示UI。模型和視圖之間盡量不要直接打交道犀忱,他們之間的交互應該通過控制器來進行募谎,控制器充當著橋梁的作用。這樣設(shè)計的目的是使不同功能的類之間盡量解耦阴汇,以利于程序的擴展数冬。
2)代理模式
委托代理(degegate),顧名思義搀庶,把某個對象要做的事情委托給別的對象去做拐纱。那么別的對象就是這個對象的代理,代替它來打理要做的事哥倔。反映到程序中秸架,首先要明確一個對象的委托方是哪個對象,委托所做的內(nèi)容是什么咆蒿。這里所做的內(nèi)容是靠協(xié)議中的方法來實現(xiàn)箫老,方法分兩種:必需實現(xiàn)(@required)的方法和根據(jù)情況選擇實現(xiàn)(@optional)的方法。
舉個例子:你是房屋租賃中介末誓,某個房東和你簽訂協(xié)議荔茬,請你替他把房子出租出去。這時,你就是房東的代理,你必須實現(xiàn)的方法是把屋子出租出去,選擇實現(xiàn)的方法是裝修别渔、添置家具、打隔斷等(依據(jù)協(xié)議而定)田巴。
3)通知模式
通知模式是觀察者模式的一種钠糊。a對象在通知中心注冊了觀察者之后,b對象發(fā)出通知廣播壹哺,a對象收到通知后就知道去做具體的事抄伍。觀察者可以是一個或多個,也可以沒有管宵。舉個例子:微博切換帳號后會發(fā)出一個通知截珍,讓多個界面重新刷新數(shù)據(jù)。
4)KVO模式
Key-Value-Observer模式也是觀察者模式的一種箩朴。KVO的機制為:當指定的被觀察對象的屬性被修改的時候岗喉,KVO都會自動的去通知相應的觀察者。舉個例子炸庞,在控制器里通過addObserver:forKeyPath:options:context:注冊一個數(shù)據(jù)源觀察者钱床,當數(shù)據(jù)源里的數(shù)據(jù)發(fā)生變化時,通過willChangeValueForKey:和didChangeValueForKey:這一對方法發(fā)出廣播埠居,控制器收到廣播后就可以利用新的數(shù)據(jù)來刷新界面查牌。
5)單例模式
通過單例模式可以保證系統(tǒng)中一個類只有一個實例而且該實例易于外界訪問,從而方便對實例個數(shù)的控制并節(jié)約系統(tǒng)資源滥壕。如果希望在系統(tǒng)中某個類的對象只能存在一個纸颜,單例模式是最好的解決方案。
6.平時會代碼復用绎橘,或經(jīng)常重構(gòu)自己的代碼嗎胁孙?
會,為了提高軟件質(zhì)量称鳞、性能涮较、軟件的擴展性和維護性、使其更加合理胡岔、
uiimageview不能點擊
框架封裝法希,繼承多態(tài)
iOS SDK:
1.如何實現(xiàn)Push通知的機制(大致寫下)
1用網(wǎng)站把要發(fā)送的消息、目的iPhone的標識打包靶瘸,發(fā)給APNS苫亦。
2APNS在自身的已注冊Push服務的iPhone列表中,查找有相應標識的iPhone怨咪,并把消息發(fā)到iPhone屋剑。
3iPhone把發(fā)來的消息傳遞給相應的應用程序,并且按照設(shè)定彈出Push通知
2.Key-Value Coding是什么诗眨?
KVC是通過字符串標識符間接訪問對象屬性和關(guān)系的機制唉匾。
5.說說Auto Release
Pool,內(nèi)存管理模式, GC, retain count
auto release pool內(nèi)存自動釋放池匠楚。放到池中的會在失效后自動釋放
內(nèi)存管理模式:可以手動申請釋放巍膘,使用auto release pool,使用ARC
GC:GabbageCollector垃圾回收
iOS有沒有GC Gabage Collector垃圾回收機制
mac os x有ios沒有
retain count:內(nèi)存計數(shù)器
技術(shù)題:
1.怎樣實現(xiàn)一個Memory Cache
alloc太耗時間
malloc(100);
malloc(200);
2.如何在有一個屬性名和值的情況芋簿,給一個對象賦值
對象名.屬性名=值
obj.name = v;
3.GBK如何轉(zhuǎn)換為UTF-8 (3字節(jié))
如何轉(zhuǎn)成Unicode.(2字節(jié))
NSStringEncodingeco=CFStringConvertEncodingToNSStringEncoding(
kCFStringEncodingGB_18030_2000);
urlStr = [urlStr
stringByAddingPercentEscapesUsingEncoding:eco];
NSURL * url=[NSURL URLWithString:urlStr];
4.如何實現(xiàn)一個帶刪除線的UILabel
用CG重繪drawRect
RTLabel開源的富文本
5.如何讓imageNamed同時兼容3.x及4.x系統(tǒng)峡懈,以及不失去緩存
imageNamed自動緩存不會消失
按照3.X和4.X的分辨率做兩張圖片,圖片名相同需要支持4.X的圖片名后加上@2X
test.pngtest@2x.png
NSString*path = [[NSBundlemainBundle]pathForResource:@"xxx"ofType:@"png"];
UIImage*iv = [[UIImagealloc] initWithContentsOfFile:path];
6.如何實現(xiàn)一個異步的UIImageView
開啟異步線程下載圖片与斤,或用三方庫進行一步操作
7.如何實現(xiàn)像Settings一樣的界面
用TableView肪康、UISwitch
8.如何實現(xiàn)滾動到底部自動加載,以及顯示一個loading cell
用scrollViewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)decelerate方法計算是否觸底撩穿,調(diào)用異步刷新事件
scrollViewDidScroll
9.如何實現(xiàn)從外部打開程序
在項目的Info.plist文件中添加一個URL types節(jié)點就可以了
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"http://www.baidu.com"]];
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"tel://18533221222"]];
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"sms://18533221222"]];
10.如何將圖片添加到照片庫
UIImage*img = [UIImageimageWithNamed:@”123.ppng”];
UIImageWriteToSavedPhotosAlbum(img,nil,nil,nil);
11.copy與retain的區(qū)別
copy復制一個對象
retain會讓計數(shù)器+1
12.Undo,
Redo如何實現(xiàn)
UIMenuItem
13.NSCoding(archive磷支,unarchive)
-(id)initWithCoder:(NSCoder
*)coder;
-(void) encodeWithCoder:(NSCoder*)coder;
加分題
1.如何實現(xiàn)一個實現(xiàn)渲染自定義格式字符串的UILabel
CoreText.RTLabel
2 Protocol與performSelector:的相同與區(qū)別,哪個更好(基礎(chǔ)參數(shù)類型傳遞)
Protocol是協(xié)議食寡,同時也走了NSObject的協(xié)議在NSObject協(xié)議中定義了很多基本的協(xié)議函數(shù)雾狈,其中包括performSelector。
3.如果使用多線程進行編碼
[nsthread detachXXXX];
[selfperformSelectorInBackground:@selector(xxx)withObject:xxx];
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;
奇創(chuàng)微迅
實現(xiàn)多線程方式抵皱;
NSThreadNSOperationGCD
代理和通知作用與區(qū)別善榛;
Delegate:把某個對象要做的事情委托給別的對象去做。那么別的對象就是這個對象的代理,代替它來打理要做的事叨叙。反映到程序中,首先要明確一個對象的委托方是哪個對象,委托所做的內(nèi)容是什么锭弊。
Notification是觀察者模式的實現(xiàn), NOtification通過Notifydcation addobserver和remove observer工作。
你工作較真嗎擂错?
認真
數(shù)據(jù)存儲的幾種方式味滞;
普通文件
plist
NSUserDefaults
歸檔
數(shù)據(jù)庫:Sqlite CoreData
介紹一下socket。
套接字钮呀,是支持TCP/IP的網(wǎng)絡(luò)通信的基本操作單元剑鞍,可以看做是不同主機之間的進程進行雙向通信的端點,簡單的說就是通信的兩方的一種約定爽醋,用套接字中的相關(guān)函數(shù)來完成通信過程
Cocos2d中背景和精靈能否在一個類里加入到CCSpriteBatchNode中蚁署;
有沒有看過CCNode這個類,簡單介紹一下
用到過物理場景嗎(大概就是重力場什么的)蚂四;
做Cocos2D有什么收獲光戈;
介紹一下播放音效(回答simpleAudioEngine還不可以)哪痰;
Cocos2D場景切換的知識(切換方式fade什么之類的)
融易通信面試題
1、面向?qū)ο蟮奶攸c
封裝繼承多態(tài)
2久妆、動畫實現(xiàn)一個view從頂部移動到底部
UIView*view = [[UIViewalloc]initWithFrame:CGRectMake(0,0,100,100)];
[self.windowaddSubview:view];
[UIViewanimateWithDuration:1animations:^{
view.center=CGPointMake(50,480-50);
}completion:nil];
3晌杰、字符串a(chǎn)-g,截取def并逆序
NSString*str =@"abcdefg";
NSString*subStr = [strsubstringWithRange:NSMakeRange(3,3)];
NSString*resStr =@"";
for(NSIntegeri = subStr.length-1; i >=0; i--) {
unicharc = [subStrcharacterAtIndex:i];
resStr = [resStrstringByAppendingFormat:@"%C",c];
}
4筷弦、寫一個獲取日期的函數(shù)肋演,輸出格式2012-06-06
NSDate*date = [NSDatedate];
NSDateFormatter*dateFm = [[NSDateFormatteralloc]init];
dateFm.dateFormat=@"yyyy-MM-dd";
NSString*dateStr = [dateFmstringFromDate:date];
NSLog(@"dateStr:%@",dateStr);
尚為視訊
1、iPhone開發(fā)的兩種方式是什么烂琴,各自的優(yōu)缺點爹殊。
iPhone開發(fā)可以有兩種方式,即Web開發(fā)和SDK編程奸绷。這兩種開發(fā)方式各有利弊梗夸,但他們都能為應用程序提供豐富、強大的功能健盒。由于兩種開發(fā)模型在本質(zhì)上存在差異绒瘦,所以他們各自適用的開發(fā)情形也不相同。Web開發(fā)適合創(chuàng)建功能簡單扣癣、動態(tài)且需要因特網(wǎng)連接的應該程序惰帽,而SDK編程適合創(chuàng)建功能復雜、強大的應用程序父虑。
2该酗、OC的兩種內(nèi)存管理方式,iOS都支持嗎士嚎。
手動內(nèi)存管理都支持
ARC只有從iOS5之后才支持
3呜魄、Notification是什么,優(yōu)缺點是什么莱衩,用什么可以代替爵嗅。
Notification是通知
觀察者模式,controller向defaultNotificationCenter添加自己的notification笨蚁,其他類注冊這個notification就可以收到通知睹晒,這些類可以在收到通知時做自己的操作(多觀察者默認隨機順序發(fā)通知給觀察者們,而且每個觀察者都要等當前的某個觀察者的操作做完才能輪到他來操作括细,可以用NotificationQueue的方式安排觀察者的反應順序伪很,也可以在添加觀察者中設(shè)定反映時間,取消觀察需要在viewDidUnload跟dealloc中都要注銷)
可以用代理實現(xiàn)
4奋单、用OC寫一個單例锉试。
//定義靜態(tài)全局變量
staticSingleton * single =nil;
+ (Singleton *)sharedSingleton{
//考慮線程安全
@synchronized(self){
if(single ==nil) {
single = [[selfalloc] init];
}
}
returnsingle;
}
5、iOS是如何管理內(nèi)存的览濒。
6呆盖、OC有多重繼承嗎拖云,如何實現(xiàn)。
推博網(wǎng)
1絮短、寫出一些常見的庫江兢,你用的操作系統(tǒng)昨忆,各個操作系統(tǒng)的區(qū)別
asi, json, gdata, sdwebimage
1丁频、iOS4.x以后
1.1多任務處理
參見iOS多任務.pdf
1.2 blocksObject
參見block編程要點.pdf
1.3 GCD
參見GCD并發(fā)處理.pdf
1.4 local Notification
參見UILocalNotification.doc
1.5 Core TelephonyFramework
參見CoreTelephony.doc
1.6 iad廣告系統(tǒng)
參見iad文件夾里的文檔
2、iOS5.x以后
2.1UIKit中的控件增加外觀屬性修改的API
用例請參考鏈接地址:
http://www.cocoachina.com/newbie/tutorial/2012/0113/3876.html
2.2自動引用計數(shù)(ARC)
參考鏈接:
http://blog.csdn.net/zkdemon/article/details/7446385
2.3Storyboards
參見Storyboards.pdf
2.4NSJSONSerialization(iOS5之后邑贴,系統(tǒng)自帶的json解析API)
iOS5以上版本應該選擇系統(tǒng)的API進行json解析席里,在解析/轉(zhuǎn)化
效率上完勝開源庫.
不能使用系統(tǒng)API的應該選擇開源解析庫JSONKit進行解析工作.
2.5Core Image Framework圖形渲染、圖形處理
參考鏈接:
http://www.cocoachina.com/iphonedev/sdk/2011/1115/3503.html
參考code:CoreImage
3拢驾、iOS6.x以后
3.1 Maps蘋果自家地圖
參見LocationAwarenessPG.pdf
3.2 Social Framework(集成了新浪微博API)
參見Social_Framework.pdf
3.3 UICollectionView (內(nèi)存重用機制奖磁,圖片展示瀑布流實現(xiàn))
參見CollectionViewPGforIOS.pdf
參考鏈接:
參考code:CollectionView-Simple
3.4 UIStatePreservation(app狀態(tài)保存)
3.5 Auto Layout (自動布局屬性)
參見AutolayoutPG.pdf
參考鏈接:
iOS7.x
系統(tǒng)
1,全新的ui設(shè)計
2繁疤,Control Center控制中心
3咖为,全新的多任務
4,AirDrop共享文件
5稠腊,全新的Safari瀏覽器交互體驗
SDK
1躁染,動態(tài)uikit新增了uidynamicitem委托用來為UIView定制動態(tài)行為
2,新增游戲引擎sprite kit Framework框架類似于cocos2d
2架忌、UITableView有時候不太流暢吞彤,有什么優(yōu)化方案
a復用單元格
b使用不透明的師徒 單元格中盡量少用動畫
c圖片加載使用異步加載 并設(shè)置圖片加載的并發(fā)數(shù)
d滑動時不加載圖片 定制滑動開始加載
e文字 圖片可以直接drawinrect繪制
f如果不是必須的,減少使用reloadData全部cell
g如果cell是動態(tài)行高叹放, 計算出高度后緩存
h cell高度固定直接用cell.rowHeight設(shè)置高度
3饰恕、UIimageView怎么使其有單擊,雙擊事件
打開用戶交互屬性井仰,使用點擊手勢埋嵌,設(shè)置單擊和雙擊
并且如果既有單擊又有雙擊那么要區(qū)分
for(UIGestureRecognizer*gesTinself.gestureRecognizers) {
if([gesTisKindOfClass:[UITapGestureRecognizerclass]]) {
//判斷單擊手勢
if(((UITapGestureRecognizer*)gesT).numberOfTapsRequired==1) {
//當tap手勢失敗的時候gesT才有效
//增加這個函數(shù)之后單擊會延遲執(zhí)行
[gesTrequireGestureRecognizerToFail:tap];
//只有雙擊失敗了單擊才有效
//如果這里不設(shè)置那么在雙擊的時候單擊手勢也會生效
break;
}
}
}
6、將一組數(shù)據(jù)永久保存到手機里俱恶,怎樣做雹嗦?
Nsuserdefaults, plist,數(shù)據(jù)庫普通文件 歸檔
7、實現(xiàn)一個橫向劃動的表格速那,有什么思路
繼承uiscrollview
8俐银、.m里面的私有方法其他的類能不能調(diào)用,若強行調(diào)用會由什么問題
在非ARC下編譯器會報警強行執(zhí)行可以調(diào)用
在arc下編譯器會報錯端仰,沒法調(diào)用
新浪樂居筆試題
1.做iOS多久了捶惜,擁有哪些蘋果設(shè)備?
4年itouch iPhoneiPod ipadiPadminiMacBookMacBook Pro macMini
2.去年你最喜愛的技術(shù)圖書是哪些荔烧?從中你學到了什么吱七?
3.平時你經(jīng)常訪問哪些編程類網(wǎng)站汽久?
http://www.w3school.com.cn
代碼庫
http://www.oschina.net/ios/codingList/
http://code4app.com
最大的iOS中文開發(fā)網(wǎng)站
http://www.cocoachina.com
(源碼共享網(wǎng)站)
//stackover flow :http://www.stackoverflow.com(有解決不了的難題時,這這個網(wǎng)站可能會帶給你驚喜)
4.為什么選擇iOS開發(fā)踊餐,你對它有什么想法景醇?
5.你有自己的開源項目嗎?用什么托管的代碼吝岭?
有g(shù)ithub
6.在OC里類的方法和屬性有幾種訪問權(quán)限三痰,分別是什么?
OC類中的方法都是公有的
屬性有@private@protected @public
7.在OC里alloc和retain語義相反的方法是窜管?
Release
8.Release的作用是什么和autorelease有什么區(qū)別散劫?什么時候用到release,什么時候用autorelease幕帆?
Release使對象計數(shù)器-1放棄絕對使用權(quán)
Autorelease延后釋放對象把對象地址放入自動釋放池获搏,交給自動釋放池管理對象釋放
一般對象指針用完之后就應該立即release,但是有些時候不能用release比如實現(xiàn)一個方法創(chuàng)建對象后返回對象的地址失乾,這個時候是不能release的只能用autorelease
9.在簡化的Apple iOS架構(gòu)中常熙,總共有多少層?
iOS的系統(tǒng)架構(gòu)分為四個層次:核心操作系統(tǒng)層(Core OS layer)碱茁、核心服務層(Core Services layer)裸卫、媒體層(Media layer)和可觸摸層(Cocoa Touch layer)。
10.什么是MVC早芭,iOS開發(fā)中起哪些作用彼城?
MVC就是Model-View-Controller的縮寫,M指的是業(yè)務模型,V指的是用戶頁面,C指的是控制器。MVC是架構(gòu)模式,是講M和V的代碼分離,從而使同那個一個程序可以使用不同的表現(xiàn)形式退个。M:表示數(shù)據(jù)和業(yè)務規(guī)則,V是用戶看到的并與之交互的頁面,C是接受用戶的輸入并調(diào)用M和V取完成用戶需求的
11.應用程序沙盒包含哪四個專門用于存儲應用程序數(shù)據(jù)的目錄募壕?
documents,tmp语盈,app舱馅,Library
12.使用Core
Location時,如何避免電池續(xù)航時間急速縮短刀荒?
13.使用哪個事件來檢測用戶請按按鈕代嗤?
14.如何實現(xiàn)接觸程序北京隱藏在textField變量的文本框顯示的軟鍵盤?
取消textField的第一響應
15.寫出你知道的設(shè)計模式缠借,以及在實際開發(fā)當中用過哪些干毅?
MVC設(shè)計模式
單例模式
代理模式
通知模式
工廠模式
適配器模式
16.為什么要用單例模式?單例模式的好處是什么泼返?
傳值共享數(shù)據(jù)硝逢,整個程序可以共享單例的數(shù)據(jù)
17.執(zhí)行代碼后,每行string對象的retain
count分別是多少?為什么渠鸽?
NSString *string = [[NSString alloc]init];
[string retain];
[string release];
[stringrelease];
unsigned long最大值如果按照%ld打印結(jié)果是-1
[[NSString alloc]init]創(chuàng)建的是一個空字符串對象叫乌,沒有必要在堆空間開辟空間,這個時候?qū)ο笥嫈?shù)器是失效的retain或者release沒有任何作用
18.寫出下列代碼的輸出結(jié)果
int a[5] = {1,2,3,4,5};
int*b = (int *)(&a+1);
printf("%d%d",*(a+1),*(b-1));
25
19.使用Objective-C寫一個冒泡算法
//冒泡
for(NSIntegeri =0; i < [stuscount]-1;i++) {
for(NSIntegerj =0; j < [stuscount]-1-i;j++) {
//獲取第j j+1學生的地址
Student*stu1 = [stusobjectAtIndex:j];
Student*stu2 = [stusobjectAtIndex:j+1];
if([stu1score] < [stu2score]) {
//交換
[stusexchangeObjectAtIndex:jwithObjectAtIndex:j+1];
}
}
}
20.寫一段代碼徽缚,用異步請求的方式抓取一個網(wǎng)站的內(nèi)容憨奸,請考慮超時,狀態(tài)碼的異常情況凿试。
中體彩彩票運營有限公司
1簡述工廠模式的原理
在基類中定義創(chuàng)建對象的一個接口排宰,讓子類決定實例化哪個類。工廠方法讓一個類的實例化延遲到子類中進行红省。
工廠方法要解決的問題是對象的創(chuàng)建時機额各,它提供了一種擴展的策略,很好地符合了開放封閉原則
2oc支持多繼承嗎吧恃?支持多接口嗎?重寫一個類的方式用繼承好麻诀,還是分類好痕寓?
Object-c的類不可以多重繼承;可以實現(xiàn)多個接口蝇闭,通過實現(xiàn)多個接口可以完成C++的多重繼承呻率;Category是類別,一般情況用分類好呻引,用Category去重寫類的方法礼仗,僅對本Category有效,不會影響到其他類與原有類的關(guān)系逻悠。
3iPad和iPone開發(fā)有什么不同
開發(fā)iPad和iPhone應用使用的是相同的SDK元践,它們之間的區(qū)別主要體現(xiàn)在設(shè)備硬件和UI操作上。(1)設(shè)備硬件:由于iPad不具備電話功能童谒,iPad1也沒有相機单旁,所以相關(guān)的特性如電話、SMS等無法使用饥伊。(2)UI操作:由于iPad屏幕大小為9.7英寸象浑,而iPhone的屏幕是3.5英寸,這就決定了兩者操作方式的不同琅豆。有些控件愉豺,如UIPopoverController,
UISliptViewController只能在iPad中使用,而不能在iPhone中使用茫因;而且當需要presentModalViewController時蚪拦,Window presentation style只對iPad有效;除此之外,iPad產(chǎn)品開發(fā)中還需針對iPad大屏幕考慮加入多指手勢以增加用戶體驗外盯。
4堆和棧的區(qū)別
5關(guān)鍵字volatile有什么含義摘盆,并給出例子
6 iPhone閱讀器要讀取個文本文件,是如何處理編碼問題的饱苟?然后pdf格式的文件如何讀取
7 iphone有哪些傳值方式孩擂?View和view之間呢
屬性傳值代理傳值block傳值單例傳值通知傳值單例傳值等等
8定義屬性時,說明不同情況下如何使用copy箱熬,retain和assign类垦?
一般都是使用retain
字符串用copy
設(shè)置代理用assign
(深圳皆凱科技有限公司筆試題)
1、objective-c中是所有對象間的交互是如何實現(xiàn)的?
通過代理去進行通訊城须,或者通過觀察者消息模式,Blocks蚤认,appdelegate
2、如何將產(chǎn)品進行多語言發(fā)布糕伐,開發(fā)砰琢?
程序國際化;比如:本地化應用程序名稱(1、選中工程,Info—Localizations點擊“+”添加要國際化的語言良瞧。(2陪汽、在InfoPlist.strings右邊會多出一個三角形,點擊展開可看到InfoPlish.strings(english)和
InfoPlish.strings(chinese)兩個版本的文件; (3、在InfoPlish.strings(english)文件中加入:
CFBundleDisplayName
="Program";其中“Program”為英文應用程序名稱,同理在InfoPlish.strings(chinese)文件中加入: CFBundleDisplayName ="應用程序";其中“應用程序”為中文名稱,注意:CFBundleDisplayName加不加雙引號都行;
(4褥蚯、編輯Info.plist,添加一個新的屬性Application has localized display
name,設(shè)置其類型為boolean,并將其value設(shè)置為YES即可挚冤。
3、objective-c中是如何實現(xiàn)線程同步的?
Mutexlock赞庶,NSCondtion lock训挡,消息傳送
使用鎖:鎖是線程編程同步工具的基礎(chǔ)。鎖可以讓你很容易保護代碼中一大塊區(qū)域以便你可以確保代碼的正確性歧强。使用POSIX互斥鎖;使用NSLock類;使用@synchronized指令等澜薄。
4、編寫函數(shù)_memmove說明如下:實現(xiàn)C語言庫函數(shù)memmove的功能:將一塊緩沖區(qū)中的數(shù)據(jù)移動到另一塊緩沖區(qū)中誊锭”硇可能有重復。
//
5丧靡、什么叫數(shù)據(jù)結(jié)構(gòu)蟆沫?(面試順風快遞iphone開發(fā))
計算機=編程+數(shù)據(jù)結(jié)構(gòu)
6、編程中温治,保存數(shù)據(jù)有哪幾種方式饭庞?數(shù)組、自定義類熬荆、文件操作舟山、數(shù)據(jù)庫如:SQLite
文件plistNSUserDefaults sqlite
7、Sizeof與strlen的區(qū)別和聯(lián)系?
8累盗、什么是抽象類寒矿?抽象類有什么作用?能實例化嗎若债?
NSOperation沒有完全實現(xiàn)的類叫抽象類, C++,java
抽象類不能實例化,不能NSOperation *a =[[NSOperation alloc] init];
9符相、用Objective-C寫冒泡法.
//
10、你對@interface和@property的理解蠢琳?
@interface聲明一個類
@property就是申明2個函數(shù)啊终,getter setter已日,編譯器會自動聲明2個函數(shù)
11绒怨、Iphone開發(fā)中控制類有什么作用?
傳遞數(shù)據(jù)展示數(shù)據(jù)數(shù)據(jù)模型和View的橋梁
12兵迅、線程中有哪些函數(shù)泰讽?寫出來例衍。
+ (NSThread*)currentThread;
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;
+ (BOOL)isMultiThreaded;
@property(readonly,retain)NSMutableDictionary*threadDictionary;
+ (void)sleepUntilDate:(NSDate*)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
+ (void)exit;
+ (double)threadPriority;
+ (BOOL)setThreadPriority:(double)p;
@propertydoublethreadPriorityNS_AVAILABLE(10_6,4_0);// To be
deprecated; use qualityOfService below
@propertyNSQualityOfServicequalityOfServiceNS_AVAILABLE(10_10,8_0);//
read-only after the thread is started
+ (NSArray*)callStackReturnAddressesNS_AVAILABLE(10_5,2_0);
+ (NSArray*)callStackSymbolsNS_AVAILABLE(10_6,4_0);
@property(copy)NSString*nameNS_AVAILABLE(10_5,2_0);
@propertyNSUIntegerstackSizeNS_AVAILABLE(10_5,2_0);
@property(readonly)BOOLisMainThreadNS_AVAILABLE(10_5,2_0);
+ (BOOL)isMainThreadNS_AVAILABLE(10_5,2_0);// reports whether current thread is main
+ (NSThread*)mainThreadNS_AVAILABLE(10_5,2_0);
- (instancetype)initNS_AVAILABLE(10_5,2_0)NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argumentNS_AVAILABLE(10_5,2_0);
@property(readonly,getter=isExecuting)BOOLexecutingNS_AVAILABLE(10_5,2_0);
@property(readonly,getter=isFinished)BOOLfinishedNS_AVAILABLE(10_5,2_0);
@property(readonly,getter=isCancelled)BOOLcancelledNS_AVAILABLE(10_5,2_0);
- (void)cancelNS_AVAILABLE(10_5,2_0);
- (void)startNS_AVAILABLE(10_5,2_0);
- (void)mainNS_AVAILABLE(10_5,2_0);// thread body method
@end
FOUNDATION_EXPORTNSString*constNSWillBecomeMultiThreadedNotification;
FOUNDATION_EXPORTNSString*constNSDidBecomeSingleThreadedNotification;
FOUNDATION_EXPORTNSString*constNSThreadWillExitNotification;
@interfaceNSObject (NSThreadPerformAdditions)
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
modes:(NSArray*)array;
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
//
equivalent to the first method with kCFRunLoopCommonModes
- (void)performSelector:(SEL)aSelector onThread:(NSThread*)thr
withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray*)arrayNS_AVAILABLE(10_5,2_0);
- (void)performSelector:(SEL)aSelector onThread:(NSThread*)thr
withObject:(id)arg waitUntilDone:(BOOL)waitNS_AVAILABLE(10_5,2_0);
//
equivalent to the first method with kCFRunLoopCommonModes
- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)argNS_AVAILABLE(10_5,2_0);
13、有沒有寫過自定義的控件菇绵?
自己定義控件有2類肄渗,1類比較多的就是類似
RatingView
UIJewels : UIButton
{
int x,y;
inttype;
UIImage *image;
}
UIImageView和UIImageUILabel和NSString
2.用CG CoreGraphicsdrawRect:
--------
|-------|每個UIView都有一個drawRect:
14、調(diào)用一個類的靜態(tài)方法需不需要release咬最?
靜態(tài)方法就是類方法,不需要,類的方法
對象放在autorelease中
15欠动、do-while與while-do的區(qū)別永乌?
16、寫出幾個死循環(huán)具伍?while(1)翅雏,for(;人芽;)望几,
用預處理指令#define聲明一個常數(shù),用以表明1年中有多少秒(忽略閏年問題)
#define SECONDS_PER_YEAR (60 * 60 * 24 *365)UL
下面是筆試秤┨靠題
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to aninteger
d) int a[10]; //一個有10個指針的數(shù)組橄抹,該指針是指向一個整型數(shù)的。
e) int *a[10]; //一個有10個指針的數(shù)組惕味,該指針是指向一個整型數(shù)的楼誓。
f) int (*a)[10]; //一個指向有10個整型數(shù)數(shù)組的指針
g) int (*a)(int); //一個指向函數(shù)的指針,該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)名挥。
h) int (*a[10])(int); //一個有10個指針的數(shù)組疟羹,該指針指向一個函數(shù),該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)。
1榄融。assign和retain参淫,copy的區(qū)別
assign就是和普通語言的賦值一樣
retain在一個對象中保存該對象需要擁有的對象
對該對象進行應用計數(shù)+1
@property (retain)為了寫程序方便
copy主要是賦值
一般 代理的申明都是assign為什么
原因有2個,
1根本就沒有必要把代理的計數(shù)器+1
2.主要是為了避免引用技術(shù)嵌套愧杯,遞歸
2涎才。如何持久保存數(shù)據(jù)
NSUserDefaults, Plist,SQLite3, file
3。網(wǎng)絡(luò)方面得比如如何檢測聯(lián)網(wǎng)httpxml等
ASIHTTPRequestReacheable.[hm]
原理是ifconfig是不是有ip地址
Reachability
來判斷是否有網(wǎng)絡(luò)3G Wifi
4民效。類之間得繼承關(guān)系比如UIview得父類是哪一個等等憔维?
UIResponder,處理觸摸畏邢,
touchBegin, touchEnd, nextResponder
5业扒。異常處理
@try {} @catch{}
在同一個類A中,有方法a和方法b,方法b如何調(diào)用方法a?
[selfa];
有A、B兩個類舒萎,B類繼承于A類程储,都實現(xiàn)了方法xx。創(chuàng)建B類實例b,如何讓b調(diào)用A類臂寝?
[super a];
const和Volatile分別代表什么意思章鲤?
Volatile表示每次都從內(nèi)存取數(shù)據(jù)
類型id代表什么意思?
面向?qū)ο蟀男┰兀?/p>
繼承和分類的區(qū)別咆贬?
Catogory
Catogory實現(xiàn)起來麻煩一些败徊,但是使用方便
NSSet類的作用是什么?
集合
編寫一個完整程序掏缎,在控制臺打印字符串“HelloWorld!”
用遞歸實現(xiàn)計算n的階乘皱蹦。(用objective-c語法實現(xiàn))
//
static全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局部變量有什么區(qū)別眷蜈?static函數(shù)與普通函數(shù)有什么區(qū)別沪哺?
C語言中講講static變量和static函數(shù)有什么作用
static關(guān)鍵字有兩種意思,你看上下文來判斷
1,表示變量是靜態(tài)存儲變量
表示變量存放在靜態(tài)存儲區(qū).
2,表示該變量是內(nèi)部連接
(這種情況是指該變量不在任何{}之內(nèi),就象全局變量那樣,這時候加上static)
,也就是說在其它的.cpp文件中,該變量是不可見的(你不能用).
當static加在函數(shù)前面的時候
表示該函數(shù)是內(nèi)部連接,之在本文件中有效,別的文件中不能應用該函數(shù).
不加static的函數(shù)默認為是全局的.
也就是說在其他的.cpp中只要申明一下這個函數(shù),就可以使用它.
1、static全局變量與普通的全局變量有什么區(qū)別酌儒?static局部變量和普通局部變量有什么區(qū)別辜妓?static函數(shù)與普通函數(shù)有什么區(qū)別?
答:全局變量(外部變量)的說明之前再冠以static就構(gòu)成了靜態(tài)的全局變量忌怎。全局變量本身就是靜態(tài)存儲方式籍滴,靜態(tài)全局變量當然也是靜態(tài)存儲方式。這兩者在存儲方式上并無不同呆躲。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個源程序异逐,當一個源程序由多個源文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的插掂。而靜態(tài)全局變量則限制了其作用域灰瞻,即只在定義該變量的源文件內(nèi)有效腥例,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi)酝润,只能為該源文件內(nèi)的函數(shù)公用燎竖,因此可以避免在其它源文件中引起錯誤。
從以上分析可以看出要销,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式即改變了它的生存期构回。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍疏咐。
static函數(shù)與普通函數(shù)作用域不同纤掸。static函數(shù)僅在本文件中使用。只在當前源文件中使用的函數(shù)應該說明為內(nèi)部函數(shù)(static)浑塞,內(nèi)部函數(shù)應該在當前源文件中說明和定義借跪。對于可在當前源文件以外使用的函數(shù),應該在一個頭文件中說明酌壕,要使用這些函數(shù)的源文件要包含這個頭文件
static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次掏愁,防止在其他文件單元中被引用;
static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值卵牍;
static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份果港,普通函數(shù)在每個被調(diào)用中維持一份拷貝
2、如何引用一個已經(jīng)定義過的全局變量糊昙?
答:extern
可以用引用頭文件的方式辛掠,也可以用extern關(guān)鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理释牺,假定你將那個變寫錯了公浪,那么在編譯期間會報錯,如果你用extern方式引用時船侧,假定你犯了同樣的錯誤,那么在編譯期間不會報錯厅各,而在連接期間報錯镜撩。
3、全局變量可不可以定義在可被多個.C文件包含的頭文件中队塘?為什么袁梗?
答:可以,在不同的C文件中以static形式來聲明同名全局變量憔古。
可以在不同的C文件中聲明同名的全局變量遮怜,前提是其中只能有一個C文件中對此變量賦初值,此時連接不會出錯鸿市。
什么是UDP和TCP的區(qū)別是什么锯梁?
TCP的全稱為傳輸控制協(xié)議即碗。這種協(xié)議可以提供面向連接的、可靠的陌凳、點到點的通信剥懒。
UDP的全稱為用戶數(shù)據(jù)報協(xié)議,它可以提供非連接的不可靠的點到多點的通信合敦。
用TCP還是UDP初橘,那要看你的程序注重哪一個方面?可靠還是快速充岛?
TCP/IP建立連接的過程
在TCP/IP協(xié)議中保檐,TCP協(xié)議提供可靠的連接服務,采用三次握手建立一個連接崔梗。
第一次握手:建立連接時夜只,客戶端發(fā)送連接請求到服務器,并進入SYN_SEND狀態(tài)炒俱,等待服務器確認盐肃;
第二次握手:服務器收到客戶端連接請求,向客戶端發(fā)送允許連接應答权悟,此時服務器進入SYN_RECV狀態(tài)砸王;
第三次握手:客戶端收到服務器的允許連接應答,向服務器發(fā)送確認峦阁,客戶端和服務器進入通信狀態(tài)谦铃,完成三次握手。
(所謂的三次握手就是要有三次連接信息的發(fā)送/接收過程榔昔。TCP連接的建立需要進行三次連接信息的發(fā)送/接收驹闰。)
-(void) print:(NSString*) msg
{
NSLog(@"%@",msg);
}
printf("%d,%c\n",i,c)
charstr[10]=",str2[]={"China"};
strcpy(str1,str2);
printf("%d",max(a,b));
把max(a,b)作為printf函數(shù)的一個參數(shù)。
obj-c有多重繼承么?不是的話有什么替代方法?
cocoa中所有的類都是NSObject的子類撒会,多繼承在這里是用protocol委托代理來實現(xiàn)的嘹朗。你不用去考慮繁瑣的多繼承,虛基類的概念诵肛。多態(tài)特性在obj-c中通過委托來實現(xiàn)屹培。
線程與進程的區(qū)別和聯(lián)系?
進程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應用的并發(fā)性怔檩。
程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式褪秀。進程有獨立的地址空間,一個進程崩潰后薛训,在保護模式下不會對其它進程產(chǎn)生影響媒吗,而線程只是一個進程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量乙埃,但線程之間沒有單獨的地址空間闸英,一個線程死掉就等于整個進程死掉锯岖,所以多進程的程序要比多線程的程序健壯,但在進程切換時自阱,耗費資源較大嚎莉,效率要差一些。但對于一些要求同時進行并且又要共享某些變量的并發(fā)操作沛豌,只能用線程趋箩,不能用進程。
自動釋放池是什么,如何工作加派?
當您向一個對象發(fā)送一個autorelease消息時叫确,Cocoa就會將該對象的一個引用放入到最新的自動釋放池。它仍然是個正當?shù)膶ο笊纸酰虼俗詣俞尫懦囟x的作用域內(nèi)的其它對象可以向它發(fā)送消息竹勉。當程序執(zhí)行到作用域結(jié)束的位置時,自動釋放池就會被釋放娄琉,池中的所有對象也就被釋放次乓。
1. ojc-c是通過一種"referring counting"(引用計數(shù))的方式來管理內(nèi)存的,對象在開始分配內(nèi)存(alloc)的時候引用計數(shù)為一,以后每當碰到有copy,retain的時候引用計數(shù)都會加一,每當碰到release和autorelease的時候引用計數(shù)就會減一,如果此對象的計數(shù)變?yōu)榱?,就會被系統(tǒng)銷毀.
2. NSAutoreleasePool就是用來做引用計數(shù)的管理工作的,這個東西一般不用你管的.
3. autorelease和release沒什么區(qū)別,只是引用計數(shù)減一的時機不同而已,autorelease會在對象的使用真正結(jié)束的時候才做引用計數(shù)減一。
什么是KVC和KVO孽水?答:KVC(Key-Value-Coding)內(nèi)部的實現(xiàn):一個對象在調(diào)用setValue的時候票腰,(1)首先根據(jù)方法名找到運行方法的時候所需要的環(huán)境參數(shù)。(2)他會從自己isa指針結(jié)合環(huán)境參數(shù)女气,找到具體的方法實現(xiàn)的接口杏慰。(3)再直接查找得來的具體的方法實現(xiàn)。KVO(Key-Value-Observing):當觀察者為一個對象的屬性進行了注冊炼鞠,被觀察對象的isa指針被修改的時候缘滥,isa指針就會指向一個中間類,而不是真實的類谒主。所以isa指針其實不需要指向?qū)嵗龑ο笳鎸嵉念惓蟆K晕覀兊某绦蜃詈貌灰蕾囉趇sa指針。在調(diào)用類的方法的時候霎肯,最好要明確對象實例的類名吟税。
kvc就是一種通過字符串去間接操作對象屬性的機制。
iphone中姿现,自定義協(xié)議?
Protocol ,看代理viewController
協(xié)議在oc中主要用在代理中
綁定的概念肖抱?
代理的概念备典?對它怎么理解?
為了模塊之間的松耦合
網(wǎng)絡(luò)編程中協(xié)議的概念意述。
NetworkDataDelegate;
3個函數(shù)理解didReceive,
蘋果上架流程提佣?
怎么樣編一個通話軟件只能在iphone上運行,在itouch上不能運行如何實現(xiàn)
UIDevice *dev =[UIDevice currentDevice];
if ([[dev model]isEqualToString:@"iPhone"]) {
} else if ([[devmodel]isEqualToString:@"iPodtouch"]) {
}
if([devuserInterfaceIdiom] == UIUserInterfaceIdiomPad) {
}
兩個上海的朋友給的他們公司自己的面試題吮蛹,大部分也都是舊題,我自己整理了下答案拌屏。潮针。
面試題:
1.viewwillAppear
viewWillDisapper, viewDidLoad他們在什么時候使用。
viewwillAppear:視圖即將可見時調(diào)用倚喂,默認情況下不執(zhí)行如何操作每篷。
viewWillDisapper:視圖消失時,覆蓋或以其他方式隱藏時調(diào)用端圈,默認不執(zhí)行任何操作焦读。
viewDidLoad:在視圖加載后調(diào)用,如果是在代碼中創(chuàng)建的試圖加載器舱权,它將在loadView方法后被調(diào)用矗晃,如果是從nib視圖頁面輸出,它將會在視圖設(shè)置好后被調(diào)用宴倍。
2.frame和bounds的區(qū)別
frame:該view在父view坐標系統(tǒng)中的位置和大小张症,參照點是父視圖的坐標系統(tǒng)。
bounds:該view在本身坐標系統(tǒng)中的位置和大小鸵贬,參照點是本身坐標系統(tǒng)俗他。
3深拷貝和淺拷貝的區(qū)別,并簡述如何實現(xiàn)一個NSObject子類的深拷貝恭理。
淺拷貝:復制一個對象為副本拯辙。
深拷貝:開閉一塊新的內(nèi)存來存儲副本對象。
想要實現(xiàn)深拷貝需要遵循和協(xié)議颜价,并實現(xiàn)代理方法涯保。
4描述UITableViewCell的復用機制。
簡單來說我認為這個復用機制是為了節(jié)省系統(tǒng)資源的開支周伦。
就是我們在展示tableView的時候系統(tǒng)并不會一次把所有的cell給創(chuàng)建出來夕春,而是創(chuàng)建一部分(具體是多少,我測試過是你能同時看到最多幾個cell专挪,就會創(chuàng)建幾個cell)及志。這樣當你滑動tableview的時候,一端的cell會滾出視圖寨腔,另一端會出現(xiàn)新的cell速侈。這個滾出視圖的cell,在滾出視圖后并沒有被閑置迫卢,而是被放進了tableview的復隊列中倚搬,與此同時,另一端出現(xiàn)的新的cell乾蛤,就會從這個復用隊列中取每界,若無則創(chuàng)建一個新的捅僵,若有則使用之。
5.寫出三種常用的設(shè)計模式眨层。
代理模式:一般和協(xié)議一塊使用完成某些傳值庙楚。例如tableview的delegate。
觀察者模式:例如通知中心趴樱,注冊通知中心馒闷,任何位置可以發(fā)送消息,注冊觀察者的對象可以接收伊佃。
單例模式:確保應用整個生命周期中窜司,某個類只有一份實例,用于共享資源數(shù)據(jù)的控制航揉。
6.NSarray
*array = @[@“a”,@“b”,@“c”,@“a”,@“d”....],里面有N個string元素塞祈,求出array中唯一元素,要求復雜度為N帅涂。
如议薪,@[@“a”,@“b”,@“b”,@“c”],輸出結(jié)果為@“abc”;
@[@“a”,@“a”,@“b”]輸出結(jié)果為@“ab”;
@[@“a”,@“a”,@“a”]輸出結(jié)果為@“a”;
(ps:就是把重復的元素去掉拼成一個字符串)
代碼實例:NSArray *arr =@[@"a",@"b",@"b",@"c"];
NSString *resultStr = [arr objectAtIndex:0];
for (NSString *str in arr) {
if ([resultStr rangeOfString:str].location == NSNotFound){
resultStr = [resultStrstringByAppendingString:str];
}
}
NSLog(@"%@",resultStr);
1.#include和#import有什么區(qū)別,@class呢媳友,#import<>跟#import“”又有什么區(qū)別
include和import都是導入某個文件斯议,但import可以防止重復導入的問題。
@class值是告訴編譯器醇锚,這是個類哼御,可以聲明一個此類的對象指針,但是具體類里邊有什么屬性焊唬,接口編譯器不知道恋昼。
#import<>適用于導入系統(tǒng)的頭文件
#import“”適用于導入自定義的頭文件
2.OC的類可以多繼承么?Category是什么赶促,使用過嗎液肌?
不可以。但是可以通過協(xié)議間接實現(xiàn)鸥滨。
category嗦哆,我們也叫做類別,就是可以為某個類增加額外的方法婿滓,包括系統(tǒng)的類和自定義的類老速。
3.編寫一個blocks使用的例子,盡可能體現(xiàn)出block編程的語法和優(yōu)勢
定義一個帶參數(shù)的blocks:
void(^logBlock)(NSString *msg);
logBlock = ^(NSString *str){
NSLog(@"%@",str);//line 3
};
使用blocks:
logBlock(@"hello”);//相當于把line
3的代碼放在這里執(zhí)行凸主。
4.在iPhone應用總?cè)绾伪4鏀?shù)據(jù)烁峭?有幾種方式。
臨時數(shù)據(jù):數(shù)組,字典等约郁。
持久化存儲:Plist,數(shù)據(jù)庫但两,沙盒鬓梅。
5.c/c++/oc怎么混編,要注意什么谨湘?
可以參考http://blog.csdn.net/gf771115/article/details/9664393
我之前公司的面試題绽快,整理了下答案
1、ObjC中紧阔,與alloc語義相反的方法是dealloc還是release坊罢?與retain語義相反的方法是dealloc還是release,為什么擅耽?需要與alloc配對使用的方法是dealloc還是release活孩,為什么?
alloc與dealloc語意相反,alloc是創(chuàng)建變量,dealloc是釋放變量乖仇。retain對應release,retain保留一個對象憾儒。調(diào)用之后,變量的計數(shù)加1∧松常或許不是很明顯,在這有例為證:
- (void) setName : (NSString*) name { [name retain];
[myname release];
myname = name;
}
我們來看一看newname的計數(shù)是怎么變化的起趾。首先,它被alloc,count = 1;然后,在setName中,它被retain, count = 2;最后,用戶自己釋放newname,count = 1,myname指向了newname。這也解釋了為什么需要調(diào)用[myname release]警儒。我們需要在給myname賦新值的時候,釋放掉以前老的變量训裆。retain之后直接dealloc對象計數(shù)器沒有釋放。alloc需要與release配對使用,因為alloc這個函數(shù)調(diào)用之后,變量的計數(shù)加1蜀铲。所以在調(diào)用alloc之后,一定要調(diào)用對應的release边琉。另外,在release一個變量之后,他的值仍然有效,所以最好是后面緊接著再var = nil。
2蝙茶、在一個對象的方法里面:
self.name = “object”;和
name=”object”
有什么不同嗎?
self.name = "object"會調(diào)用對象的setName()方法,name
= "object"會直接把object賦值給當前對象的name屬性艺骂。
3、這段代碼有什么問題嗎:
@implementation Person
- (void)setAge:(int)newAge {
self.age = newAge;
}
@end
會進入死循環(huán)
4隆夯、什么是retain count?
引用計數(shù)(ref count或者retain count)钳恕。對象的內(nèi)部保存一個數(shù)字,表示被引用的次數(shù)。例如,某個對象被兩個指針所指向(引用)那么它的retain count為2蹄衷。需要銷毀對 象的時候,不直接調(diào)用dealloc,而是調(diào)用release忧额。release會 讓retain count減1,只有retain count等于0,系統(tǒng)才會調(diào)用dealloc真正銷毀這個對象。
5愧口、以下每行代碼執(zhí)行后睦番,person對象的retain count分別是多少
Person *person = [[Person alloc] init]; 1
[person retain]; 2
[person release]; 1
[person release]; 1
6、為什么很多內(nèi)置類如UITableViewController的delegate屬性都是assign而不是retain的?
會引起循環(huán)引用
7托嚣、定義屬性時巩检,什么情況使用copy,assign示启,和retain
assign用于簡單數(shù)據(jù)類型,如NSInteger,double,bool,retain和copy用于對象,copy用于當a指向一個對象,b也想指向同樣的對象的時候,如果用assign,a如果釋放,再調(diào)用b會crash,如果用copy的方式,a和b各自有自己的內(nèi)存,就可以解決這個問題兢哭。retain會使計數(shù)器加一,也可以解決assign的問題。另外:atomic和nonatomic用來決
if (property != newValue) { [property release];
property = [newValue retain]; }
8夫嗓、autorelease的對象是在什么時候被release的迟螺?
autorelease實際上只是把對release的調(diào)用延遲了,對于每一個Autorelease,系統(tǒng)只是把該Object放入了當前的Autorelease pool中,當該pool被釋放時,該pool中的所有Object會被調(diào)用Release。對于每一個Runloop,系統(tǒng)會隱式創(chuàng)建一個Autorelease pool,這樣所有的release pool會構(gòu)成一個象CallStack一樣的一個棧式結(jié)構(gòu),在每一個Runloop結(jié)束時,當前棧頂?shù)腁utorelease pool會被銷毀,這樣這個pool里的每個Object(就是autorelease的對象)會被release舍咖。那什么是一個Runloop呢?一個UI事件,Timer call, delegate call,都會是一個新的Runloop矩父。
9蒸痹、這段代碼有什么問題,如何修改
for (int i = 0; i < someLargeNumber; i++) {
NSString *string = @”Abc”;
string = [string lowercaseString];
string = [string
stringByAppendingString:@"xyz"];
NSLog(@“%@”, string);
}
內(nèi)存泄露
NSAutorelease?*?pool1?=?[[NSAutoreleasePool?alloc]?init];
NSString *string = @”Abc”;
string = [string lowercaseString];
string = [string
stringByAppendingString:@"xyz"];
11腻异、autorelease和垃圾回收機制(gc)有什么關(guān)系?
12敞峭、IPhone OS有沒有垃圾回收(gc)郑诺?
沒有
13夹姥、什么是Notification?
觀察者模式辙诞,controller向defaultNotificationCenter添加自己的notification辙售,其他類注冊這個notification就可以收到通知,這些類可以在收到通知時做自己的操作(多觀察者默認隨機順序發(fā)通知給觀察者們飞涂,而且每個觀察者都要等當前的某個觀察者的操作做完才能輪到他來操作旦部,可以用NotificationQueue的方式安排觀察者的反應順序,也可以在添加觀察者中設(shè)定反映時間较店,取消觀察需要在viewDidUnload跟dealloc中都要注銷)士八。參考鏈接:http://useyourloaf.com/blog/2010/6/6/delegation-or-notification.html
14、什么時候用delegate梁呈,什么時候用Notification婚度?
delegate針對one-to-one關(guān)系,并且reciever可以返回值給sender官卡,notification可以針對one-to-one/many/none,reciever無法返值給sender.所以蝗茁,delegate用于sender希望接受到reciever的某個功能反饋值,notification用于通知多個object某個事件寻咒。
15哮翘、什么是KVC和KVO?
KVC(Key-Value-Coding)內(nèi)部的實現(xiàn):一個對象在調(diào)用setValue的時候毛秘,(1)首先根據(jù)方法名找到運行方法的時候所需要的環(huán)境參數(shù)饭寺。
(2)他會從自己isa指針結(jié)合環(huán)境參數(shù)阻课,找到具體的方法實現(xiàn)的接口。(3
)再直接查找得來的具體的方法實現(xiàn)艰匙。
KVO(Key-Value-Observing):當觀察者為一個對象的屬性進行了注冊限煞,被觀察對象的isa指針被修改的時候,isa指針就會指向一個中間類员凝,而不是真實的類晰骑。所以isa指針其實不需要指向?qū)嵗龑ο笳鎸嵉念悺K晕覀兂绦蜃詈貌灰蕾囉趇sa指針绊序。在調(diào)用類的方法的時候,最好要明確對象實例的類名秽荞。
16骤公、Notification和KVO有什么不同?
17扬跋、KVO在ObjC中是怎么實現(xiàn)的阶捆?
18、ViewController的loadView,
viewDidLoad, viewDidUnload分別是在什么時候調(diào)用的钦听?在自定義ViewController的時候這幾個函數(shù)里面應該做什么工作洒试?
當view為nil時調(diào)用loadView,view完成加載調(diào)用viewDidLoad,view釋放時調(diào)用viewDidUnload.
viewDidLoad在view從nib文件初始化時調(diào)用朴上,loadView在controller的view為nil時調(diào)用垒棋。此方法在編程實現(xiàn)view時調(diào)用,view控制器默認會注冊memory?warning?notification,當view?controller的任何view沒有用的時候,viewDidUnload會被調(diào)用痪宰,在這里實現(xiàn)將retain的view?release,如果是retain的IBOutlet?view屬性則不要在這里release,IBOutlet會負責release叼架。
19、ViewController的didReceiveMemoryWarning是在什么時候被調(diào)用的衣撬?默認的操作是什么乖订?
內(nèi)存超過闕值,嘗試釋放view.
默認調(diào)用[super?didReceiveMemoryWarning]
20具练、UITableViewController中乍构,創(chuàng)建cell時,initWithStyle:reuseIdentifier中扛点,reuseIdentifier有什么用哥遮?簡述復用原理。
21占键、UIView和CALayer有什么區(qū)別昔善?
一個UIView包括CALayer樹,CALayer是一個數(shù)據(jù)模型畔乙,聽說iPhone君仆。包括了一些用于顯示的對象,但本身不用于顯示。CALayer相當于photoshop的一個層返咱,很多動畫可以通過設(shè)置CALayer來完成钥庇。據(jù)說有人用CALayer顯示圖片來播放視頻。Coresome?kind?ofimation應該是用CAlayer來完成各種動畫咖摹。
22评姨、以UIView類animateWithDuration:animation:為例,簡述UIView動畫原理萤晴。
1吐句、Object-C有多繼承嗎?沒有的話用什么代替店读?
沒嗦枢,protocol.cocoa中所有的類都是NSObject的子類多繼承在這里是用protocol委托代理來完成的你不用去思索繁瑣的多繼承虛基類的概念ood的多態(tài)特性在obj-c中通過委托來完成.
2、Object-C有私有方法嗎屯断?私有變量呢文虏?
沒,有殖演。objective-c?-類里面的方法唯有兩種靜態(tài)方法和實例方法.這似乎就不是完整的面向?qū)ο罅税凑誒O的原則就是一個對象只暴露有用的東西.如果沒有了私有方法的話對付一些小局限的代碼重用就不那么利市了.在類里面聲名一個私有方法
@interface?Controller?:NSObject?{?NSString?*something;?}
+(void)thisIsAStaticMethod;
-(void)thisIsAnInstsome?kind?ofceMethod;
@end
@interface?Controller(private)?-
(void)thisIsAPrivateMethod;
@end
@private
可以用來修飾私有變量在Objective‐C中氧秘,所有實例變量默認都是私有的,所有實例方法默認都是公有的
3趴久、#import和#include的區(qū)別丸相,@class代表什么?
#import能防止重復引用朋鞍,#include不能已添,@class前置聲明一個類。
4滥酥、Object-C的內(nèi)存管理更舞?
引用計數(shù)器。
5坎吻、為什么很多內(nèi)置的類缆蝉,如TableViewController的delegate的屬性是assign不是retain?
防止循環(huán)引用瘦真。
6刊头、定義屬性時,什么情況使用copy诸尽、assign原杂、retain?
copy:拷貝對象您机。assign:傳值穿肄,一般用于基礎(chǔ)類型年局。retain:傳地址,引用計數(shù)器加一咸产。
9矢否、請簡述iPhone數(shù)據(jù)持久化的種方法?
答:屬性列表脑溢、對象歸檔僵朗、iPhone的嵌入式關(guān)系數(shù)據(jù)庫(SQLite3)和拷久性工具Core?Data。
IOS開發(fā)面試題
1屑彻、請手工書寫@property(nonatomic验庙,retain)NSString *name;的get與set方法社牲。
getter
- (NSString *)name {
return _name; }
setter
-(void)setName:(NSString
*)aName
{
if (name != aName)
{
[name release];
name = [aName retain];
}
}
2壶谒、請描述object c內(nèi)存管理機制、以及一般原則膳沽?
1)當你使用new,alloc和copy方法創(chuàng)建一個對象時,該對象的保留計數(shù)器值為1.當你不再使用該對象時,你要負責向該對象發(fā)送一條release或autorelease消息.這樣,該對象將在使用壽命結(jié)束時被銷毀.
2)每retain一次會使引用系數(shù)就加1,相應地要在適當位置release
內(nèi)存管理原則
1.誰創(chuàng)建让禀,誰釋放(“誰污染挑社,誰治理”)。如果你通過alloc巡揍、new或者(mutable)copy來創(chuàng)建一個對象痛阻,那么你必須調(diào)用release或autorelease∪校或句話說阱当,不是你創(chuàng)建的,就不用你去釋放
2.一般來說糜工,除了alloc弊添、new或copy之外的方法創(chuàng)建的對象都被聲明了autorelease(autorelease是延遲釋放內(nèi)存,不用你自己去手動釋放捌木,系統(tǒng)會知道在什么時候該去釋放掉它油坝。)
3.誰retain,誰release刨裆。只要你調(diào)用了retain澈圈,無論這個對象是如何生成的,你都要調(diào)用release
3帆啃、nil與NULL的區(qū)別瞬女?
nil是一個對象,而NULL是一個值
4努潘、如何判斷一個對象是否屬于某個類诽偷?
respondsToSelector
,performSelector,conformstoProrocol,isKindofClass,isMemberofClass
5坤学、object c如何實現(xiàn)私有方法?
在object-c中沒有私有方法,只有靜態(tài)方法和實力方法.但是可以用@private修飾私有變量.用.m文件中使用catogory來實現(xiàn)私有方法.
6渤刃、IBOutlet UIVIew *v:
@property(nonatomic,retain)*V:
這個v對象需要release嗎拥峦?如果需要怎么release?
需要release在類的dealloc中release
6卖子、BOOL與bool區(qū)別略号?
BOOL只是一個宏,不是基本的數(shù)據(jù)類型洋闽,BOOL實際上=char玄柠,占1字節(jié)空間。
bool是C++的基礎(chǔ)數(shù)據(jù)類型诫舅,占用1個字節(jié)羽利。
對于BOOL類型,當值為1時為真刊懈,即YES这弧;當值為0時為假,即NO虚汛;
YES和NO都是宏匾浪。
對于bool類型,值只要不是0就是為真卷哩,即true蛋辈;當值為0時為假,即false
7将谊、用NSLog函數(shù)輸出一個浮點類型冷溶,結(jié)果四舍五入,并保留一位小數(shù)尊浓。
NSLog(@”%.1f”,3.14);
8逞频、用object-c或者C語言寫一個方法判斷20120101!(階乘)在十進制栋齿、二進制下分別為幾位數(shù)虏劲?
staticdoublePI =3.141592653589793239;
staticdoubleE =2.718281828459045;
intmul10(intn){
return(int)(log10(sqrt(2*PI*n))+n*log10(n/E))+1;
}
二進制下
intmul2(intn){
return(int)(log2(sqrt(2*PI*n))+n*log2(n/E))+1;
}
10、用c語言寫一個函數(shù)判斷兩個鏈表(每個鏈表不存在環(huán))是否相交褒颈?
————————————————————————————
IOS開發(fā)工程師筆試題(請在30分鐘內(nèi)做完)
1柒巫、Objective-C有私有方法么?私有變量呢谷丸?
2堡掏、關(guān)鍵字const有什么含義?
3刨疼、關(guān)鍵字volatile有什么含義泉唁?并給出三個不同的例子鹅龄;
4、線程與進程的區(qū)別和聯(lián)系亭畜?
5扮休、簡單闡述堆和棧的區(qū)別;
6拴鸵、簡單闡述一下Objective-C內(nèi)存管理玷坠;
7、為什么很多內(nèi)置類如UITableViewController的delegate屬性都是assign而不是retain的劲藐?
防止相互引用
————————————————————————————
仙掌軟件C語言試題2011(V0.01)
1八堡、編寫一個函數(shù),要求輸入年月日時分秒聘芜,輸出該年月日時分秒的下一秒兄渺。如輸入2004
年12月31日23時59分59秒,則輸出2005年1月1日0時0分0秒
2汰现、設(shè)x=2挂谍,則表達式(++x)*3的值是()。
3瞎饲、設(shè)x=2凳兵,則表達式(++x)/3的值是()。
4企软、棧操作數(shù)據(jù)的原則是_______,隊列操作數(shù)據(jù)的原則是_______饭望。
5仗哨、用最有效率的辦法來計算2乘以8等于幾。
6铅辞、請寫出代碼使用位運算來交換整數(shù)變量x厌漂,y的值。
7斟珊,編寫代碼實現(xiàn)同一平面內(nèi)兩圓是否碰撞苇倡,其中:
第一個圓圓心坐標為(x1,y1)囤踩,半徑是r1旨椒,第二個圓圓心坐標為(x2,y2)堵漱,如果碰撞返回1综慎,否則返回0
函數(shù)聲明如下:
int colliswith(intx1,int y1,int rl,int x2,int y2,int r2){}
8、編寫代碼實現(xiàn)輸入一個整數(shù)勤庐,求該整數(shù)的二進制表達中有多少個1示惊。例如輸入10好港,其二進制表示為1010,有兩個1米罚,因此輸出2钧汹。
9、下面是C語言中兩種if語句判斷方式录择,請問哪種寫法更好拔莱?為什么?
int n糊肠;
if(n==10)//第一種判斷方式
if(10==n)//第二種判斷方式
10辨宠、i最后等于多少?
int i = 1;
int j = i++;
if((i>j++)&&(i++==j) i+=j;
11货裹、用預處理指令#define聲明一個常數(shù)嗤形,用以表明一年中有多少秒(忽略閏月)。
12弧圆、說說下面兩個聲明語句的區(qū)別赋兵?
1)char const *p
2)char * const p
13、int(*[10])(int)表示的是什么搔预?
14霹期、c和c++中的struct有什么不同?
15拯田、有以下表達式:
int a=248历造;b=4;
int const c=21船庇;
const int*d=&a吭产;
int*const e=&b;
int const*fconst=&a鸭轮;
請問下列表達式哪些會被編譯器禁止臣淤?為什么?
*c=32窃爷;d=&b邑蒋;*d=43;e=34按厘;e=&a医吊;f=0x321f;
16逮京、你的程序需要用到一個數(shù)據(jù)文件遮咖,不行的是,由于容量的問題造虏,你不得不事先將其壓縮御吞,游戲運行時再解壓麦箍。
由于該數(shù)據(jù)文件的特點是,它的每個字節(jié)只用到了最后5位(即每個字節(jié)的值都小于32)陶珠,并且連續(xù)相同的字節(jié)數(shù)不超過7個挟裂,你決定采取這樣的壓縮算法:對于連續(xù)相同的n個字節(jié),壓縮成一個字節(jié)揍诽,前3位存儲n诀蓉,后5為存儲實際數(shù)據(jù)。
(1)現(xiàn)在已經(jīng)從文件中讀出了len個字節(jié)到字節(jié)數(shù)組file中暑脆,寫一個函數(shù)把它壓解到另一個字節(jié)數(shù)組data渠啤。
(2)在什么情況下,這種壓縮算法的壓縮率較低添吗?
18沥曹、簡述A*算法的核心思想(或者用偽碼實現(xiàn))
北京誠信迪賽科技.jpg
1、編寫一個標準strepy函數(shù)碟联。
2妓美、描述vector,list,map各自使用情形。
3鲤孵、如何將單鏈表倒轉(zhuǎn)壶栋?
4、如何判斷字符串是否為回文普监?比如“abcba”就是一個回文贵试。
5、找出一個整數(shù)數(shù)組中第二大的數(shù)凯正,嘗試處理各種輸入異常毙玻。
6、寫段代碼漆际,去掉一個有英文字母組成的字符串中的重復字符。
7夺饲、寫出快速排序或冒泡排序的代碼奸汇。
品科藝IOS開發(fā)面試題
1、在objective-c中往声,說明一下你如何讓一個函數(shù)或類變量成為一個私有的函數(shù)或類變量擂找。
@private可以修飾 成員變量 成為私有的
成員方法可以在類的.m文件實現(xiàn)在.h不能聲明就可以實現(xiàn)類似私有的方法
2、描述一個UIView框架(UIView
frame)和邊界(bounds)之間的差異浩销。如果一個固定大小的UIView被做成動畫來回移動贯涎,這個框架或邊界會不會變化?
frame:該view在父view坐標系統(tǒng)中的位置和大小慢洋,參照點是父視圖的坐標系統(tǒng)塘雳。
bounds:該view在本身坐標系統(tǒng)中的位置和大小陆盘,參照點是本身坐標系統(tǒng)。
Frame會變bouns不會變
3败明、描述什么會在UIViewController中觸發(fā)(void)didReceiveMemoryWarning函數(shù)隘马,你怎么在View controller中重寫(override)這個函數(shù)。
當發(fā)生內(nèi)存警告時會調(diào)用
iOS6之前需要調(diào)用didReceiveMemoryWarning內(nèi)部寫self.view = nil;并且再調(diào)用viewDidUnload并且在里面釋放子視圖
iOS6之后在didReceiveMemoryWarning中不需要調(diào)用viewDidUnload妻顶,需要手動寫self.view = nil并且釋放子視圖
4酸员、若有一個表有1000行,每一行包含一個不同的圖像讳嘱,每一個圖像都是從不同的網(wǎng)址URL下載的(例如http://www.test.com/test123.jpg),您將采取什么辦法幔嗦,以確保表內(nèi)圖像滾動盡可能順利?
1.使用第三方開源庫SDWebimage
2.異步下載沥潭,保存每一個圖片的cell所在行邀泉,另外在本地以圖片網(wǎng)絡(luò)地址加密進行本地保存,下次加載從本地獲取
5叛氨、描述在聲明一個@property時關(guān)鍵字之間的差異
weak
strong
copy
assing
retain
6呼渣、寫一個函數(shù),當你有一個字符串數(shù)組寞埠,例如:
Input NSArray content(@“1apple”屁置,@“2banana”,@“3oranges”)
要輸出一個NSDictionary object仁连,其中每一個字符串的第一個字母是key蓝角,剩下的是value/object,例如:
NSDictionary content(“1”=>“apple”饭冬,“2”=>“banana”使鹅,“3”=>“orange”)
voidarrayChangeToDictionary(NSArray*arr) {
NSMutableDictionary*dict = [[NSMutableDictionaryalloc]init];
for(NSString*strinarr) {
[dictsetObject:[strsubstringFromIndex:1]forKey:[strsubstringToIndex:1]];
}
NSLog(@"dict:%@",dict);
}
7、當具有a class @interface RadioTuner:NSObject時昌抠,寫出.h文件和.m文件患朱,以證明使用Singleton設(shè)計模式。
@interfaceSingleton : NSObject
+ (Singleton *)sharedSingleton;
@end
#import"Singleton.h"
@implementationSingleton
//定義靜態(tài)全局變量
staticSingleton*
single =nil;
+ (Singleton*)sharedSingleton{
//考慮線程安全
@synchronized(self){
if(single==nil) {
single= [[selfalloc]init];
}
}
returnsingle;
}
9.寫一個objective-c的函數(shù)來找到第N個素數(shù)炊苫。
- (BOOL)isPrimeNumber:(NSInteger)number {
BOOLisPrime =YES;
for(inti =2; i <= number/2; i++) {
if(number % i ==0) {
isPrime =NO;
break;
}
}
returnisPrime;
}
- (NSInteger)prime:(NSInteger)n {
NSIntegercount =0;
NSIntegeri =2;
while(1) {
if([selfisPrimeNumber:i]) {
count++;
}
if(count == n) {
returni;
}
i++;
}
}
10裁厅、寫一個objective-C的函數(shù)來測試一個字符串是否是回文(回文是一個字符串,在閱讀是前進和后退是相同的侨艾,例如:racecar执虹,level)。
- (BOOL)isLoopNumber:(NSString*)str {
NSString*newStr =@"";
for(NSIntegeri = str.length-1; i >=0; i--) {
unicharc = [strcharacterAtIndex:i];
newStr = [newStrstringByAppendingFormat:@"%C",c];
}
if([newStrisEqualToString:str]) {
returnYES;
}else{
returnNO;
}
}
—————————————————————————————
網(wǎng)絡(luò)題
1唠梨、畫出TCP/IP四層模型或IOS的七層模型袋励。
2、IP地址頭部都有哪些字段?簡單描述其作用茬故。
3盖灸、IPv6與IPv4的區(qū)別?
4均牢、簡述TCP協(xié)議鏈接的建立過程玄叠,斷開鏈接的過程苫费,以及端口的作用。
5、Qos用來干什么的受啥?
6饮潦、請盡可能的寫出你對WLAN的了解银觅。
軟通動力IOS開發(fā)面試題
一首繁、用預處理指令#define定義求兩個數(shù)中的較大值。
二哨查、Objective-C有私有方法么逗抑?私有變量呢?
三寒亥、闡述static關(guān)鍵字的作用邮府。
四、Objective-C有多重繼承么溉奕?不是的話有什么替代方法褂傀?
五、#import跟#include的區(qū)別加勤,@class呢仙辟?
六、簡單闡述一下Objective-C內(nèi)存管理鳄梅。
七叠国、定義屬性時,什么情況使用copy戴尸,passing粟焊,和retain?
八孙蒙、你是怎么理解MVC的
九项棠、Objective-C中得protocol、selector马篮、category是什么沾乘?
協(xié)議 選擇器 類別(類目)
代碼題:
一怜奖、這段代碼的意義浑测,有沒有問題
-(void)setName:(NSString*)name {
[myname release];
[name retain];
myname=name;
}
這段代碼最好加一個判斷
-(void)setName:(NSString*)name{
if(myname!=name){
[myname release];
[name retain];
myname=name;
}
}
二、self.name=“object”;和name=“object”有何不同?
三迁央、以下代碼有沒有問題掷匠?有沒有內(nèi)存泄露?
for(inti=0;i
{
NSString*string=@“Abc”;
string=[string lowercaseString];
string=[string stringByAppendingString:@“xyz”];
NSLog(@“%@”,string);
}
string一直重復打印abcxyz如果someLargeNumber特別大會存在內(nèi)存方面的問題岖圈,因為for循環(huán)中一直不斷創(chuàng)建新的對象讹语,最好在for里面加一個自動釋放池,釋放里面不用的對象
如:
for(inti=0;i
{
@autoreleasePool {
NSString*string=@“Abc”;
string=[string lowercaseString];
string=[string stringByAppendingString:@“xyz”];
NSLog(@“%@”,string);
}
}
四蜂科、寫一個iOS中委托的定義以及使用
實際上 委托就是代理顽决,比如A委托B做一些事情,那么B就是A的代理导匣,iOS中代理設(shè)計模式的應用常常會和協(xié)議結(jié)合起來使用才菠,常常用協(xié)議來規(guī)范約束代理的行為
A.h
#import
@protocolWork
- (void)work;
@end
@interfaceA :NSObject
{
id_delegate;
}
@property(nonatomic,assign)iddelegate;
- (void)delegateGoToWork;
@end
A.m
#import"A.h"
@implementationA
- (void)delegateGoToWork {
if([self.delegaterespondsToSelector:@selector(work)]) {
[self.delegateperformSelector:@selector(work)];
}
}
@end
B.h
#import
#import"A.h"
@interfaceB :NSObject
@end
B.m
#import"B.h"
@implementationB
- (void)work {
NSLog(@"B is Working");
}
@end
#import"A.h"
#import"B.h"
intmain(intargc,constchar* argv[])
{
@autoreleasepool{
A*a = [[Aalloc]init];
B*b = [[Balloc]init];
a.delegate= b;
[adelegateGoToWork];
[arelease];
[brelease];
}
return0;
}
上機題
1、寫一個iPhone程序贡定,有navigation導航欄赋访,內(nèi)容是一個table,table的第一行放1行文字(文字內(nèi)容來源于項目里新建的plist文件)缓待,第二行放一個文本框蚓耽;點擊每一行會彈出不同的提示信息。
2旋炒、寫一個iPhone程序步悠,有2屏,可以通過滑動切換国葬,第二屏有一個webview贤徒,讀取本地的html文件。Html文件中會加載一個本地的xml文件汇四,獲取xml文件中的數(shù)據(jù)內(nèi)容并顯示接奈。(可選:html中加載本地的js文件)
——————————————————————————————
產(chǎn)研中心技術(shù)部招聘面試題
1、描述UITableView的重用機制通孽。
2序宦、ViewController從創(chuàng)建到顯示在屏幕上分別調(diào)用了哪些函數(shù)?
3背苦、NSArray和NSMutableArray有什么區(qū)別互捌?
4、編程題:定義一個委托行剂,并調(diào)用秕噪、實現(xiàn)它。
5厚宰、編程題:寫一個異常處理代碼塊腌巾。
6遂填、編程題:寫一個block代碼塊。
7澈蝙、編程題:實現(xiàn)一個view使其可以在view controller里使用吓坚,里面由上到下放標簽,字體顏色藍色灯荧;一個輸入框礁击;一個圓角按鈕,按鈕文字是“發(fā)送”逗载;
8哆窿、Can we use one tableview with two
different datasources?(可用中文回答)
9、Difference between frame and bounds ?(可用中文回答)
10厉斟、實例化一個UITableView對象 要求寫出關(guān)鍵語句