1、簡(jiǎn)述OC中內(nèi)存管理機(jī)制。與retain配對(duì)使用的方法是dealloc還是release吉捶,為什么?需要與alloc配對(duì)使用的方法是dealloc還是release皆尔,為什么呐舔?readwrite,readonly床佳,assign滋早,retain,copy砌们,nonatomic 杆麸、atomic、strong浪感、weak屬性的作用昔头?
OC使用了一種叫做引用計(jì)數(shù)的機(jī)制來(lái)管理對(duì)象,如果對(duì)一個(gè)對(duì)象使用了alloc影兽、[Mutable]copy揭斧,retain,那么你必須使用相應(yīng)的realease或者autorelease峻堰。也可以理解為自己生成的對(duì)象讹开,自己持有。非自己生成的對(duì)象捐名,自己也能持有旦万。不在需要自己持有的對(duì)象時(shí)釋放。非自己持有的對(duì)象無(wú)法釋放镶蹋。生成并持有對(duì)象成艘,持有對(duì)象,釋放對(duì)象,廢棄對(duì)象贺归。readwrite(默認(rèn)):可讀可寫还惠,表示既有g(shù)etter方法接奈,也有setter方法汇歹。readonly:表示只有g(shù)etter方法比原,沒有setter方法。nonatomic:不考慮線程安全婶熬。atomic(默認(rèn)):線程操作安全剑勾。strong(默認(rèn)):ARC下和MRC下retain一樣光坝,weak(ARC下):和(MRC下)assign類似,區(qū)別是當(dāng)weak指向的內(nèi)存釋放掉后自動(dòng)置為nil甥材,防止野指針盯另。unsafe_unretained聲明一個(gè)若引用,但不會(huì)自動(dòng)置為nil洲赵,可能會(huì)出現(xiàn)野指針鸳惯。線程安全下的setter和getter方法:-(NSString *)value{@synchronized(self){return [[_value retain] autorelease];}}-(void)setValue:(NSString *)aValue{@synchronized(self){[aValue retain];[_value release];_value = aValue;}}
2、類變量的@protected ,@private,@public,@package叠萍,聲明各有什么含義芝发?上面的幾個(gè)聲明表明的時(shí)類成員的作用域,
@private作用范圍只能在自身類(外界既不可訪問(wèn)苛谷,又不能繼承)辅鲸;@protected作用范圍在自身類和子類,如果什么都不加修飾腹殿,默認(rèn)是@protected(外界不可訪問(wèn)独悴,但是可以繼承);@public作用范圍最大锣尉,可以在任何地方被訪問(wèn)(外界即可訪問(wèn)刻炒,又可以繼承);@package作用范圍在某個(gè)框架內(nèi)
3自沧、線程是什么坟奥?進(jìn)程是什么?二者有什么區(qū)別和聯(lián)系拇厢?線程是CPU獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位(可以理解為一個(gè)進(jìn)程中執(zhí)行的代碼片段)爱谁,進(jìn)程是資源分配的基本單位(進(jìn)程是一塊包含了某些資源的內(nèi)存區(qū)域)。進(jìn)程是線程的容器孝偎,真正完成代碼執(zhí)行的是線程访敌,而進(jìn)程則作為線程的執(zhí)行環(huán)境。一個(gè)程序至少包含一個(gè)進(jìn)程邪媳,一個(gè)進(jìn)程至少包含一個(gè)線程捐顷,一個(gè)進(jìn)程中的多個(gè)線程共享當(dāng)前進(jìn)程所擁有的資源荡陷。
4雨效、談?wù)勀銓?duì)多線程開發(fā)的理解?ios中有幾種實(shí)現(xiàn)多線程的方法废赞?
好處:1徽龟、使用線程可以把程序中占據(jù)時(shí)間長(zhǎng)的任務(wù)放到后臺(tái)去處理,如圖片唉地、視頻的下載2据悔、發(fā)揮多核處理器的優(yōu)勢(shì)传透,并發(fā)執(zhí)行讓系統(tǒng)運(yùn)行的更快、更流暢极颓,用戶體驗(yàn)更好缺點(diǎn):1朱盐、大量的線程降低代碼的可讀性,2菠隆、更多的線程需要更多的內(nèi)存空間3兵琳、當(dāng)多個(gè)線程對(duì)同一個(gè)資源出現(xiàn)爭(zhēng)奪的時(shí)候要注意線程安全的問(wèn)題。
iOS有三種多線程編程的技術(shù):1骇径、NSThread(兩種創(chuàng)建方式)[NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self withObject:nil];NSThread *myThread = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething:) object:nil];[myThread start];2躯肌、NSOperationQueueNSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init];oprationQueue addOperationWithBlock:^{//這個(gè)block語(yǔ)句塊在子線程中執(zhí)行}http://alloc.sinaapp.com/wp/?p=2373、Grand Central Dispatch (GCD)dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{? ? // 耗時(shí)的操作? ? dispatch_async(dispatch_get_main_queue(), ^{? ? ? ? // 更新界面? ? });});PS:不顯示的創(chuàng)建線程的方法:用NSObject的類方法? performSelectorInBackground:withObject: 創(chuàng)建一個(gè)線程:[Obj performSelectorInBackground:@selector(doSomething)
5破衔、線程同步和異步的區(qū)別清女?IOS中如何實(shí)現(xiàn)多線程的同步?
同步:一個(gè)線程要等待上一個(gè)線程執(zhí)行完之后才能執(zhí)行當(dāng)前的線程晰筛,生活中的例子(上廁所)嫡丙。異步:同時(shí)去做兩件或者多件事。比如邊聽歌邊看報(bào)读第。原子操作(atomic)迄沫、加鎖(NSLock、NSRecursive卦方、NSConditionLock)羊瘩、@synchronized? GCD串行隊(duì)列,GCD當(dāng)中的屏障,NSOperationQueue設(shè)置最大并發(fā)數(shù)為1
6、假設(shè)有一個(gè)字符串a(chǎn)abcad盼砍,請(qǐng)寫一段程序尘吗,去掉字符串中不相鄰的重復(fù)字符串,即上述字符串處理之后的輸出結(jié)果為:aabcd.
本題的題意是以第一個(gè)出現(xiàn)的字母作為參照浇坐,只要之后出現(xiàn)相同的字母并且和第一個(gè)字母不相鄰睬捶,那么就刪除。為防止刪除某些字符之后近刘,把之前不相鄰的重復(fù)字符串轉(zhuǎn)化為相鄰字符串擒贸,所以可以先用空格替換掉需要?jiǎng)h除的字符,最后對(duì)數(shù)組里面的空格進(jìn)行處理觉渴。
-(void)removeRepeat:(NSString *)aNum{
? ? NSMutableArray *mArr = [[NSMutableArray alloc]initWithCapacity:10];?
? for (int i = 0;i < aNum.length;i++)? ? {? ? ? ? [mArr addObject:[aNum substringWithRange:NSMakeRange(i,1)]];? ? }? ? NSLog(@"- %@", mArr);? ? [self compareNum:mArr];? ? NSLog(@"%@",mArr);}//比較是否相等-(NSMutableArray *)compareNum:(NSMutableArray *)mArr{? ? int count = mArr.count;//重新定義了,count不會(huì)減一? ? for (int j = 0; j < count - 1; j++)? ? {? ? ? ? for (int i = j; i < count - 1-1-1; i++)? ? ? ? {? ? ? ? ? ? NSLog(@" %@? %@",[mArr objectAtIndex:j],[mArr objectAtIndex:i + 2]);? ? ? ? ? ? NSString *a = [mArr objectAtIndex:j];? ? ? ? ? ? NSString *b = [mArr objectAtIndex:i+2];? ? ? ? ? ? if ([a isEqualToString:b])? ? ? ? ? ? {? ? ? ? ? ? ? ? [mArr replaceObjectAtIndex:i + 2 withObject:@" "];? ? ? ? ? ? }? ? ? ? }? ? }? ? return mArr;}
7介劫、獲取一臺(tái)設(shè)備唯一標(biāo)識(shí)的方法有哪些?MAC地址案淋,udid座韵,keychain,open udid,廣告標(biāo)識(shí)IDFA-identifierForIdentifier
8、iOS類是否可以多繼承誉碴?如果沒有宦棺,那可以用其他方法實(shí)現(xiàn)嗎?簡(jiǎn)述實(shí)現(xiàn)過(guò)程黔帕。不可以代咸,可以通過(guò)消息轉(zhuǎn)發(fā)、delegate和protocol和類別來(lái)實(shí)現(xiàn)類似多繼承成黄。
9侣背、堆和棧的區(qū)別?棧區(qū)(stack)--由編譯器自動(dòng)分配釋放慨默,存放函數(shù)的參數(shù)值贩耐、局部變量的值。堆區(qū)(heap)--一般由程序員分配釋放厦取。全局區(qū)(靜態(tài)區(qū))(static)--全局變量和靜態(tài)變量潮太。程序結(jié)束后由系統(tǒng)釋放。? ? ? 文字常量區(qū)--常量字符串存放在這里虾攻。程序結(jié)束后由系統(tǒng)釋放铡买。? ? ? 程序代碼區(qū)—存放函數(shù)體的二進(jìn)制文件。棧:只要棧的剩余空間大于所申請(qǐng)空間霎箍,系統(tǒng)將為程序提供內(nèi)存奇钞,否則將報(bào)異常提示棧溢 出。堆:首先應(yīng)該知道操作系統(tǒng)有一個(gè)記錄空閑內(nèi)存地址的鏈表漂坏,當(dāng)系統(tǒng)收到程序的申請(qǐng)時(shí)景埃,會(huì)遍歷該鏈表,尋找第一個(gè)空間大于所申請(qǐng)空間的堆結(jié)點(diǎn)顶别,然后將該結(jié)點(diǎn)從空閑結(jié)點(diǎn)鏈表中刪除谷徙,并將該結(jié)點(diǎn)的空間分配給程序,另外驯绎,對(duì)于大多數(shù)系統(tǒng)完慧,會(huì)在這塊內(nèi)存空間中的首地址處記錄本次分配的大小,這樣剩失,代碼中的delete語(yǔ)句才能正確的釋放本內(nèi)存空間屈尼。另外,由于找到的堆結(jié)點(diǎn)的大小不一定正好等于申請(qǐng)的大小拴孤,系統(tǒng)會(huì)自動(dòng)的將多余的那部分重新放入空閑鏈表中脾歧。
10、iOS本地?cái)?shù)據(jù)存儲(chǔ)都有哪幾種方式乞巧?iOS如何實(shí)現(xiàn)復(fù)雜對(duì)象的存儲(chǔ)涨椒?
1摊鸡、NSKeyedArchiver(歸檔)采用歸檔的形式來(lái)保存數(shù)據(jù)绽媒,該數(shù)據(jù)對(duì)象需要遵守NSCoding協(xié)議蚕冬,并且該對(duì)象對(duì)應(yīng)的類必須提供encodeWithCoder:和initWithCoder:方法。
2是辕、NSUserDefaults:用來(lái)保存應(yīng)用程序設(shè)置和屬性囤热、用戶保存的數(shù)據(jù)。用戶再次打開程序或開機(jī)后這些數(shù)據(jù)仍然存在获三。NSUserDefaults可以存儲(chǔ)的數(shù)據(jù)類型包括:NSData旁蔼、NSString、NSNumber疙教、NSDate棺聊、NSArray、NSDictionary贞谓。
3限佩、Write寫入方式:永久保存在磁盤中。
4裸弦、SQLite(FMDB祟同、CoreData)
11、深拷貝和淺拷貝的理解理疙?深拷貝拷貝的是內(nèi)容晕城,淺拷貝拷貝的是指針。深拷貝和淺拷貝最大的區(qū)別就是子類對(duì)象的地址是否改變窖贤,如果子類對(duì)象的地址改變那么就是深拷貝砖顷。
12、怎樣實(shí)現(xiàn)一個(gè)singleton的類赃梧。static LOSingleton * shareInstance;+( LOSingleton *)sharedInstance{? ? @synchronized(self){//這個(gè)東西其實(shí)就是 一個(gè)加鎖择吊。如果self 其他線程訪問(wèn),則會(huì)阻塞槽奕。這樣做一般是用來(lái)對(duì)單例 進(jìn)行一個(gè)死鎖的保護(hù)? ? ?
? if (shareInstance == nil) {? ? ? ? ??
shareInstance = [[super allocWithZone:NULL] init];? ??
? }? ?
}return shareInstance;
}
//第二種方式
+ (LOSingleton *) sharedInstance{?
? static? LOSingleton *sharedInstance = nil ;??
static? dispatch_once_t onceToken;? // 鎖??
dispatch_once (& onceToken, ^ {? ? // 最多調(diào)用一次? ??
? sharedInstance = [[self? alloc] init];??
});
return? sharedInstance;}寫一個(gè)標(biāo)準(zhǔn)宏MIN几睛,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)?#define kMIN(X,Y)? ((X)? > (Y)) ? (Y) :(X)iphone os有沒有垃圾回收機(jī)制粤攒?簡(jiǎn)單闡述一下OC內(nèi)存管理所森。iphone os沒有垃圾回收機(jī)制。垃圾回收機(jī)制用于在空閑時(shí)間以不定時(shí)的方式動(dòng)態(tài)的回收無(wú)任何引用的對(duì)象占據(jù)的內(nèi)存空間夯接。簡(jiǎn)述應(yīng)用程序按Home鍵進(jìn)入后臺(tái)時(shí)的生命周期焕济,以及從后臺(tái)回到前臺(tái)時(shí)的生命周期?應(yīng)用程序的狀態(tài):Not running 未運(yùn)行盔几,程序沒啟動(dòng)Inactive? ? 未激活晴弃,程序在前臺(tái)運(yùn)行,不過(guò)沒接受到事件,沒有事件處理的狀態(tài)下通常處于這個(gè)狀態(tài)上鞠。Active? ? ? 激活? 程序在前臺(tái)并且接收到了事件Backgound? 后臺(tái)? 程序在后臺(tái)而且能執(zhí)行代碼际邻,大多數(shù)程序進(jìn)入這個(gè)狀態(tài)后會(huì)在在這個(gè)狀態(tài)上停留一會(huì)。Suspended? 掛起? 程序在后臺(tái)不能執(zhí)行代碼芍阎。ViewController 的 alloc世曾,loadView, viewDidLoad,viewWillAppear,viewDidUnload,dealloc、init分別是在什么時(shí)候調(diào)用的谴咸?在自定義ViewController的時(shí)候這幾個(gè)函數(shù)里面應(yīng)該做什么工作轮听?? ? ? ? alloc初始化當(dāng)前的ViewControllerloadView:沒有正在使用nib視圖頁(yè)面,子類將會(huì)創(chuàng)建自己的自定義視圖層viewDidLoad:試圖被加載后調(diào)用viewWillAppear:試圖即將出現(xiàn)的時(shí)候調(diào)用viewDidUnload:當(dāng)系統(tǒng)內(nèi)存吃緊的時(shí)候會(huì)調(diào)用該方法,釋放掉當(dāng)前未在window中顯示的試圖和對(duì)應(yīng)的控制器使用UITableView時(shí)候必須要實(shí)現(xiàn)的幾種方法岭佳?2個(gè)血巍。-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section; 這個(gè)方法返回每個(gè)分區(qū)的行數(shù)-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath)indexPath;這個(gè)方法返回我們調(diào)用的每一個(gè)單元格UIImage初始化一張圖片有幾種方法?簡(jiǎn)述各自的優(yōu)缺點(diǎn)珊随。1藻茂、從資源讀取UIImage *image = [UIImage imageNamed:@”1.png”];2、從網(wǎng)絡(luò)讀取NSURL*url=[NSURL URLWithString:@"http://www.sinaimg.cn/qc/photo_auto/chezhan/2012/50/00/15/80046_950.jpg"];3.從手機(jī)本地讀取//讀取本地圖片非resourceNSString *aPath3=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];UIImage *imgFromUrl3=[[UIImage alloc]initWithContentsOfFile:aPath3]; 4.從現(xiàn)有的context中獲得圖像//add ImageIO.framework and #importCGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);
CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
//transformCTM的2種方式
//CGContextConcatCTM(ctx, CGAffineTransformMakeScale(.2, -0.2));
//CGContextScaleCTM(ctx,1,-1);
//注意坐標(biāo)要反下,用ctx來(lái)作為圖片源
CGImageRef capture=CGBitmapContextCreateImage(ctx);
CGContextDrawImage(ctx, CGRectMake(160, 0, 160, 230), [image CGImage]);
CGContextDrawImage(ctx, CGRectMake(160, 230, 160, 230), img);
CGImageRef capture2=CGBitmapContextCreateImage(ctx);
5玫恳、用Quartz的CGImageSourceRef來(lái)讀取圖片
CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);
CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);
截取字符串”20?|?http://www.baidu.com”中辨赐,”|”字符前面和后面的數(shù)據(jù),分別輸出它們京办。
NSString?*string?=?@”?20?|?http://www.baidu.com”;
[string?componentsSeparatedByString:@”|”];
用obj-c寫一個(gè)冒泡排序
NSMutableArray?*array?=?[NSMutableArray?arrayWithArray:@[@"3",@"1",@"10",@"5",@"2",@"7",@"12",@"4",@"8"]];
NSString??*tmp;
for?(int?i?=?0;?i?<?array.count;?i?++)?{
for?(int?j?=?0;?j?<?array.count??-?1?-?i;?j++)?{
if?([[array?objectAtIndex:j]?integerValue]?>?[[array?objectAtIndex:j?+?1]?integerValue])?{
tmp?=?[array?objectAtIndex:j];
[array?replaceObjectAtIndex:j?withObject:[array?objectAtIndex:j?+?1]];
[array?replaceObjectAtIndex:j?+?1?withObject:tmp];
}
}
}
分析json掀序、xml的區(qū)別?json惭婿、xml解析方式的底層是如何處理的不恭?
json底層原理遍歷字符串中的字符,最終根據(jù)各市規(guī)定的特助字符财饥,比如{}换吧,[],:號(hào)等進(jìn)行區(qū)分,{}是字典钥星,[]表示的時(shí)數(shù)組沾瓦,:號(hào)是字典的鍵和值的分水嶺,最總是將json數(shù)據(jù)轉(zhuǎn)化為字典谦炒。Xml兩種解析方式贯莺,DOM和SAX,DOM需要讀入整個(gè)XML文檔(文檔驅(qū)動(dòng)),SAX是事件驅(qū)動(dòng)的宁改,并不需要讀入整個(gè)文檔缕探,文檔的讀入過(guò)程也就是SAX的解析過(guò)程。
面向?qū)ο蟮娜筇卣骰苟祝⒆骱?jiǎn)單的介紹
封裝爹耗、繼承耙考、多態(tài)。封裝:是把客觀事物封裝成抽象的類潭兽,隱藏內(nèi)部的實(shí)現(xiàn)倦始,對(duì)外部提供接口。繼承:可以使用現(xiàn)有類的所有功能讼溺,并且在無(wú)需重新編寫原來(lái)的類的情況下對(duì)這些功能進(jìn)行擴(kuò)展楣号。多態(tài):不同的對(duì)象以自己的方式響應(yīng)相同的的消息的能力叫做多態(tài)最易,或者說(shuō)父類指針指向子類對(duì)象<如UITableView的怒坯,cellForRow方法,返回值類型是UITbaleViewCell藻懒,但是你返回的cell可以是你自定義的cell,在比如多個(gè)類里面都有同一個(gè)方法>
簡(jiǎn)述NotificationCenter剔猿、KVC、KVO嬉荆、Delegate归敬?并說(shuō)明它們之間的區(qū)別?
Notification:觀察者模式鄙早,controller向defaultNotificationCenter添加自己的 notification汪茧,其他類注冊(cè)這個(gè)notification就可以收到通知,這些類可以在收到通知時(shí)做自己的操作(多觀察者默認(rèn)隨機(jī)順序發(fā)通知給 觀察者們限番,而且每個(gè)觀察者都要等當(dāng)前的某個(gè)觀察者的操作做完才能輪到他來(lái)操作舱污,可以用NotificationQueue的方式安排觀察者的反應(yīng)順序,也 可以在添加觀察者中設(shè)定反映時(shí)間弥虐,取消觀察需要在viewDidUnload 跟dealloc中都要注銷)扩灯。
KVC鍵值編碼,可以直接通過(guò)字符串的名字(key)來(lái)間接訪問(wèn)屬性的機(jī)制霜瘪,而不是通過(guò)調(diào)用getter和setter方法訪問(wèn)珠插。
KVO:觀測(cè)指定對(duì)象的屬性,當(dāng)指定對(duì)象的屬性更改之后會(huì)通知相應(yīng)的觀察者颖对。
delegate:一對(duì)一捻撑,delegate遵循某個(gè)協(xié)議并實(shí)現(xiàn)協(xié)議聲明的方法。
屬性的聲明使用assign缤底,防止出現(xiàn)循環(huán)引用的問(wèn)題布讹。
Objective-C有私有方法么?私有變量呢训堆?如多沒有的話描验,有沒有什么代替的方法?
objective-c?–?類里面的方法只有兩種,?靜態(tài)方法和實(shí)例方法.
@private來(lái)修飾私有變量
OC中所有的實(shí)例變量默認(rèn)都是私有的坑鱼,所有的實(shí)例方法默認(rèn)都是公有的膘流。
#import絮缅、#include和@class有什么區(qū)別
#include c語(yǔ)言中引入一個(gè)頭文件,但是可能出現(xiàn)交叉編譯
#import在OC中引入自己創(chuàng)建的頭文件#import””或者系統(tǒng)框架#import<>呼股。#import不會(huì)出現(xiàn)交叉編譯
@class對(duì)一個(gè)類進(jìn)行聲明耕魄,告訴編譯器有這個(gè)類,但是類的定義什么的都不知道
談?wù)勀銓?duì)MVC的理解彭谁?為什么要用MVC吸奴?在Cocoa中MVC是怎么實(shí)現(xiàn)的?你還熟悉其他的OC設(shè)計(jì)模式或別的設(shè)計(jì)模式嗎缠局?
MVC是Model-VIew-Controller则奥,就是模型-視圖-控制器,?MVC把軟件系統(tǒng)分為三個(gè)部分:Model,View狭园,Controller读处。在cocoa中,你的程序中的每一個(gè)object(對(duì)象)都將明顯地僅屬于這三部分中的一個(gè)唱矛,而完全不屬于另外兩個(gè)罚舱。MVC可以幫助確保幫助實(shí)現(xiàn)程序最大程度的可重用性。各MVC元素彼此獨(dú)立運(yùn)作绎谦,通過(guò)分開這些元素管闷,可以構(gòu)建可維護(hù),可獨(dú)立更新的程序組建窃肠。
單例模式包个,delegate設(shè)計(jì)模式,target-action設(shè)計(jì)模式
舉出5個(gè)以上你所熟悉的ios??sdk庫(kù)有哪些和第三方庫(kù)有哪些铭拧?
UIKit,MapKit,CoreLocation,CFNetWork,MessageUI,ImageIO,CoreData赃蛛,
AFNetWorking,MKNetWorkKit,ASIHttpRequest,FMDB,ZXing,ZBar,SDWebImage
你做iphone開發(fā)時(shí)候,有哪些傳值方式搀菩,view和view之間是如何傳值的呕臂?
屬性、delegate肪跋、KVO歧蒋、blocks
描述上拉加載、下拉刷新的實(shí)現(xiàn)機(jī)制州既?
根據(jù)下拉或者上拉的距離來(lái)判斷是否進(jìn)行網(wǎng)絡(luò)請(qǐng)求
什么是沙盒(sandbox)谜洽?沙盒包含哪些文件,描述每個(gè)文件的使用場(chǎng)景吴叶。如何獲取這些文件的路徑阐虚?如何獲取應(yīng)用程序包中文件的路徑?
iOS應(yīng)用程序只能在為該改程序創(chuàng)建的文件系統(tǒng)中讀取文件蚌卤,不可以去其它地方訪問(wèn)实束,此區(qū)域被成為沙盒奥秆,所以所有的非代碼文件都要保存在此,例如圖像咸灿,圖標(biāo)构订,聲音,映像避矢,屬性列表悼瘾,文本文件等。
默認(rèn)情況下审胸,每個(gè)沙盒含有3個(gè)文件夾:Documents, Library 和 tmp亥宿。
Documents:蘋果建議將程序中建立的或在程序中瀏覽到的文件數(shù)據(jù)保存在該目錄下,iTunes備份和恢復(fù)的時(shí)候會(huì)包括此目錄Library:存儲(chǔ)程序的默認(rèn)設(shè)置或其它狀態(tài)信息歹嘹;
Library/Caches:存放緩存文件箩绍,iTunes不會(huì)備份此目錄孔庭,此目錄下文件不會(huì)在應(yīng)用退出刪除
tmp:提供一個(gè)即時(shí)創(chuàng)建臨時(shí)文件的地方尺上。
iTunes在與iPhone同步時(shí),備份所有的Documents和Library文件圆到。iPhone在重啟時(shí)怎抛,會(huì)丟棄所有的tmp文件。
介紹一下XMPP芽淡?有什么優(yōu)缺點(diǎn)嗎马绝?
XMPP:基于XML的點(diǎn)對(duì)點(diǎn)的即時(shí)通訊協(xié)議。
XMPP?協(xié)議是公開的挣菲,XMPP?協(xié)議具有良好的擴(kuò)展性富稻,安全性
缺點(diǎn)是只能傳輸文本
談?wù)剬?duì)性能優(yōu)化的看法,如何做白胀?
從用戶體驗(yàn)出發(fā):1椭赋、程序logging不要太長(zhǎng)、2或杠、相同數(shù)據(jù)不做重復(fù)獲取哪怔、3、昂貴資源要重用(cell向抢、sqlite认境、date),4挟鸠、良好的編程習(xí)慣和程序設(shè)計(jì):選擇正確的集合對(duì)象和算法來(lái)進(jìn)行編程叉信、選擇適合的數(shù)據(jù)存儲(chǔ)格式(plist、SQLite)艘希、優(yōu)化SQLite查詢語(yǔ)句5硼身、數(shù)據(jù)資源方面的優(yōu)化(緩存和異步加載)
解決方案:
? 能夠發(fā)現(xiàn)問(wèn)題
? 利用log或工具分析問(wèn)題原因
? 假設(shè)問(wèn)題原因
改進(jìn)代碼和設(shè)計(jì)
以.mm為拓展名的文件里鉴未,可以包含的代碼有哪些?c和obj-c如何混用
obj-c的編譯器處理后綴為m的文件時(shí)鸠姨,可以識(shí)別obj-c和c的代碼铜秆,?處理mm文件可以識(shí)別obj-c,c,c++代碼,但cpp文件必須只能用c/c++代碼讶迁,而且cpp文件include的頭文件中连茧,也不能出現(xiàn)obj-?c的代碼,因?yàn)閏pp只是cpp
2)?在mm文件中混用cpp直接使用即可巍糯,所以obj-c混cpp不是問(wèn)題
3)在cpp中混用obj-?c其實(shí)就是使用obj-c編寫的模塊是我們想要的啸驯。
如果模塊以類實(shí)現(xiàn),那么要按照cpp?class的標(biāo)準(zhǔn)寫類的定義祟峦,頭文件中不能出現(xiàn)obj-c的東西罚斗,包括#import?cocoa的。實(shí)現(xiàn)文件中宅楞,即類的實(shí)現(xiàn)代碼中可以使用obj-c的東西针姿,可以import,只是后綴是mm。
如果模塊以函數(shù)實(shí)現(xiàn)厌衙,那么頭文件要按?c的格式聲明函數(shù)距淫,實(shí)現(xiàn)文件中,c++函數(shù)內(nèi)部可以用obj-c婶希,但后綴還是mm或m