iOS面試題-酷狗面試

簡(jiǎn)述OC中內(nèi)存管理機(jī)制怀泊。與retain配對(duì)使用的方法是dealloc還是release,為什么误趴?需要與alloc配對(duì)使用的方法是dealloc還是release霹琼,為什么?readwrite,readonly枣申,assign售葡,retain,copy忠藤,nonatomic 挟伙、atomic、strong模孩、weak像寒、unsafe_unretained屬性的作用?

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方法萍诱,沒(méi)有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];//新對(duì)象先retain
            [_value release];//釋放舊對(duì)象
            _value = aValue;//對(duì)象賦值
      }
}

類變量的@protected ,@private,@public,@package周瞎,聲明各有什么含義?

上面的幾個(gè)聲明表明的時(shí)類成員的作用域;
@private作用范圍只能在自身類(外界既不可訪問(wèn)饵蒂,又不能繼承)声诸;@protected作用范圍在自身類和子類,如果什么都不加修飾【默認(rèn)】苹享,(外界不可訪問(wèn)双絮,但是可以繼承)浴麻;
@public作用范圍最大,可以在任何地方被訪問(wèn)(外界即可訪問(wèn)囤攀,又可以繼承)软免;
@package作用范圍在某個(gè)框架內(nèi)

線程是什么?進(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)程所擁有的資源剃允。

談?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ù):

//NSThread(兩種創(chuàng)建方式) 
[NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self withObject:nil]; 
NSThread *myThread = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething:) object:nil]; 
[myThread start]; 
//NSOperationQueue 
NSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init]; 
oprationQueue addOperationWithBlock:^{ 
//這個(gè)block語(yǔ)句塊在子線程中執(zhí)行 
} 
//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) withObject:nil];

線程同步和異步的區(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ù)為maxConcurrentOperationCount = 1

獲取一臺(tái)設(shè)備唯一標(biāo)識(shí)的方法有哪些掉弛?

MAC地址,udid喂走,keychain殃饿,open udid,廣告標(biāo)識(shí)IDFA-identifierForIdentifier

iOS類是否可以多繼承?如果沒(méi)有芋肠,那可以用其他方法實(shí)現(xiàn)嗎乎芳?簡(jiǎn)述實(shí)現(xiàn)過(guò)程

不可以,可以通過(guò)消息轉(zhuǎn)發(fā)帖池、delegate和protocol和類別來(lái)實(shí)現(xiàn)類似多繼承

堆和棧的區(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)的將多余的那部分重新放入空閑鏈表中铲敛。

iOS本地?cái)?shù)據(jù)存儲(chǔ)都有哪幾種方式褐澎?iOS如何實(shí)現(xiàn)復(fù)雜對(duì)象的存儲(chǔ)?

NSKeyedArchiver(歸檔)采用歸檔的形式來(lái)保存數(shù)據(jù)伐蒋,該數(shù)據(jù)對(duì)象需要遵守NSCoding協(xié)議工三,并且該對(duì)象對(duì)應(yīng)的類必須提供encodeWithCoder:和initWithCoder:方法;
NSUserDefaults:用來(lái)保存應(yīng)用程序設(shè)置和屬性迁酸、用戶保存的數(shù)據(jù)。用戶再次打開程序或開機(jī)后這些數(shù)據(jù)仍然存在俭正。NSUserDefaults可以存儲(chǔ)的數(shù)據(jù)類型包括:NSData奸鬓、NSString、NSNumber段审、NSDate全蝶、NSArray、NSDictionary;
Write寫入方式:永久保存在磁盤中;
SQLite(FMDB寺枉、CoreData) ;
NSCoding + NSKeyedArchiver實(shí)現(xiàn)復(fù)雜對(duì)象的存儲(chǔ);

iOS的動(dòng)態(tài)性

iOS的動(dòng)態(tài)性來(lái)自三個(gè)方面:動(dòng)態(tài)類型抑淫、動(dòng)態(tài)綁定、動(dòng)態(tài)載入姥闪、SEL類型
1始苇、動(dòng)態(tài)類型<弱類型>(id):在代碼的運(yùn)行階段判斷代碼的類型,使用id類型可以讓應(yīng)用在“運(yùn)行時(shí)”使用任何類型來(lái)替換筐喳。動(dòng)態(tài)類型讓程序更加靈活催式,但是會(huì)使數(shù)據(jù)的統(tǒng)一性降低和代碼的可讀性。我們常用靜態(tài)類型<強(qiáng)類型>(如NSString),使用靜態(tài)類型編譯器可以完全分析你的代碼避归,這讓代碼的性能和可預(yù)知性更高荣月。
2、動(dòng)態(tài)綁定:讓代碼在運(yùn)行時(shí)判斷需要調(diào)用什么方法梳毙,而不是在編譯時(shí)哺窄。動(dòng)態(tài)類型和動(dòng)態(tài)綁定使得選擇哪個(gè)接收者已經(jīng)調(diào)用什么方法都放到運(yùn)行時(shí)去完成。
3账锹、動(dòng)態(tài)載入:應(yīng)用程序可以根據(jù)需要加載可執(zhí)行代碼以及資源萌业,而不是 在啟動(dòng)時(shí)就加載所有資源。
4奸柬、SEL類型 iOS在編譯的時(shí)候會(huì)根據(jù)方法的名字(包括參數(shù)序列)生年,生成一個(gè)用來(lái)區(qū)分這個(gè)方法的唯一的ID,這個(gè)ID是SEL類型的廓奕,SEL的本質(zhì)就是類方法的編號(hào)[函數(shù)地址]抱婉。(類似C語(yǔ)言里面的函數(shù)指針,但是OC的類不能直接使用函數(shù)指針懂从,這樣只能做一個(gè)@selector語(yǔ)法來(lái)取授段。注意:@selector是查找當(dāng)前類(含子類)的方法。

深拷貝和淺拷貝的理解番甩?

深拷貝拷貝的是內(nèi)容,淺拷貝拷貝的是指針届搁。深拷貝和淺拷貝最大的區(qū)別就是子類對(duì)象的地址是否改變缘薛,如果子類對(duì)象的地址改變那么就是深拷貝窍育。

怎樣實(shí)現(xiàn)一個(gè)singleton的類?

static SingletonSample * instance;
+( SingletonSample *)sharedInstance{
    @synchronized(self){//這個(gè)東西其實(shí)就是 一個(gè)加鎖。如果self 其他線程訪問(wèn)宴胧,則會(huì)阻塞漱抓。這樣做一般是用來(lái)對(duì)單例 進(jìn)行一個(gè)死鎖的保護(hù)
        if (!instance) {
            instance = [[super allocWithZone:NULL] init];
        }
    }
    return instance;
}
//第二種方式
+ (SingletonSample *) sharedInstance
{
    static  SingletonSample *instance;
    static  dispatch_once_t onceToken;  // 鎖
    dispatch_once (& onceToken, ^ {     // 最多調(diào)用一次,
        instance = [[self  alloc] init];
    });
    return  instance;
}

RunLoop是什么?

一個(gè)RunLoop就是一個(gè)時(shí)間處理的循環(huán)恕齐,用來(lái)不停的調(diào)度工作以及處理輸入時(shí)間乞娄。使用runloop的目的是讓你的線程在有工作的時(shí)候忙于工作,而沒(méi)工作的時(shí)候處于休眠狀態(tài)。runloop的設(shè)計(jì)是為了減少cpu無(wú)謂的空轉(zhuǎn);

簡(jiǎn)述應(yīng)用程序按Home鍵進(jìn)入后臺(tái)時(shí)的生命周期显歧,以及從后臺(tái)回到前臺(tái)時(shí)的生命周期仪或?
應(yīng)用程序的狀態(tài):

Not running 未運(yùn)行,程序沒(méi)啟動(dòng)
Inactive 未激活士骤,程序在前臺(tái)運(yùn)行范删,不過(guò)沒(méi)接受到事件,沒(méi)有事件處理的狀態(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í)行代碼巨缘。

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
//告訴代理進(jìn)程啟動(dòng)但還沒(méi)進(jìn)入狀態(tài)保存
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// 告訴代理啟動(dòng)基本完成程序準(zhǔn)備開始運(yùn)行
- (void)applicationWillResignActive:(UIApplication *)application
// 當(dāng)應(yīng)用程序?qū)⒁敕腔顒?dòng)狀態(tài)執(zhí)行添忘,在此期間,應(yīng)用程序不接收消息或事件若锁,比如來(lái)電話了
- (void)applicationDidBecomeActive:(UIApplication *)application
//   當(dāng)應(yīng)用程序入活動(dòng)狀態(tài)執(zhí)行搁骑,這個(gè)剛好跟上面那個(gè)方法相反
- (void)applicationDidEnterBackground:(UIApplication *)application
//  當(dāng)程序被推送到后臺(tái)的時(shí)候調(diào)用。所以要設(shè)置后臺(tái)繼續(xù)運(yùn)行拴清,則在這個(gè)函數(shù)里面設(shè)置即可
- (void)applicationWillEnterForeground:(UIApplication *)application
//當(dāng)程序從后臺(tái)將要重新回到前臺(tái)時(shí)候調(diào)用靶病,這個(gè)剛好跟上面的那個(gè)方法相反。
- (void)applicationWillTerminate:(UIApplication *)application
//當(dāng)程序?qū)⒁顺鍪潜徽{(diào)用口予,通常是用來(lái)保存數(shù)據(jù)和一些退出前的清理工作娄周。這個(gè)需要要設(shè)置UIApplicationExitsOnSuspend的鍵值。
- (void)applicationDidFinishLaunching:(UIApplication*)application
//當(dāng)程序載入后執(zhí)行

描述應(yīng)用程序的啟動(dòng)順序沪停?

1煤辨、程序入口main函數(shù)創(chuàng)建UIApplication實(shí)例和UIApplication代理實(shí)例
2、在UIApplication代理實(shí)例中重寫啟動(dòng)方法木张,設(shè)置第一ViewController
3众辨、在第一ViewController中添加控件,實(shí)現(xiàn)對(duì)應(yīng)的程序界面舷礼。

為什么很多內(nèi)置類如UITableViewControl的delegate屬性都是assign而不是retain鹃彻?請(qǐng)舉例

防止循環(huán)引用,
Student * str=[];
Teacher *teacher=[[Teacher alloc] init];
Student * student=[[Student alloc] init];
teacher.delegate=student;
student.delegate= teacher;
在teacher中dealloc會(huì)release當(dāng)前的Delegate妻献,就會(huì)觸發(fā)student對(duì)象release蛛株,繼而也會(huì)導(dǎo)致student執(zhí)行dealloc团赁,在student中也會(huì)release自己的delegate,產(chǎn)生循環(huán)了谨履。

簡(jiǎn)述你對(duì)UIView欢摄、UIWindow和CALayer的理解?

UIView繼承于UIResponder, UIResponder繼承于NSObject,UIView可以響應(yīng)用戶事件笋粟。CALayer繼承于NSObject怀挠,所以CALayer不能響應(yīng)事件;
UIView構(gòu)建界面,UIView側(cè)重于對(duì)內(nèi)容的管理害捕,CALayer側(cè)重于對(duì)內(nèi)容的繪制绿淋。
UIView是用來(lái)顯示內(nèi)容的,可以處理用戶事件吨艇;CALayer是用來(lái)繪制內(nèi)容的躬它,對(duì)內(nèi)容進(jìn)行動(dòng)畫處理,依賴與UIView來(lái)進(jìn)行顯示东涡,不能處理用戶事件冯吓;

簡(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é)議聲明的方法;

分別描述類別(categories)和延展(extensions)是什么械蹋?以及兩者的區(qū)別出皇?繼承和類別在實(shí)現(xiàn)中有何區(qū)別?為什么Category只能為對(duì)象添加方法哗戈,卻不能添加成員變量郊艘?

category類目:在不知道源碼的情況下為一個(gè)類擴(kuò)展方法,extension:為一個(gè)類聲明私有方法和變量。
繼承是創(chuàng)建了一個(gè)新的類暇仲,而類別只是對(duì)類的一個(gè)擴(kuò)展步做,還是之前的類副渴。
類目的作用就是為已知的類添加方法;

談?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中所有的控件草娜、窗口等都繼承自 UIView挑胸,對(duì)應(yīng)MVC中的 V。UIView及其子類主要負(fù)責(zé)UI的實(shí)現(xiàn)宰闰,而UIView所產(chǎn)生的事件都可以采用委托的方式茬贵,交給UIViewController實(shí)現(xiàn)。對(duì)于不同的 UIView移袍,都有相應(yīng)的UIViewController 對(duì)應(yīng)MVC中的C解藻。比如在iPhone OS上常用的UITableView,它所對(duì)應(yīng)的Controller就是UITableViewController葡盗。至于MVC中的M螟左,那需要根據(jù)用 戶自己的需求來(lái)實(shí)現(xiàn)了。
MVC可以幫助確保幫助實(shí)現(xiàn)程序最大程度的可重用性觅够。各MVC元素彼此獨(dú)立運(yùn)作胶背,通過(guò)分開這些元素,可以構(gòu)建可維護(hù)喘先,可獨(dú)立更新的程序組建钳吟。
單例模式,delegate設(shè)計(jì)模式苹祟,target-action設(shè)計(jì)模式砸抛,觀察者模式,MVVM

說(shuō)說(shuō)響應(yīng)鏈

當(dāng)事件發(fā)生的時(shí)候树枫,響應(yīng)鏈?zhǔn)紫缺话l(fā)送給第一個(gè)響應(yīng)者(往往是事件發(fā)生的視圖直焙,也就是用戶觸摸屏幕的地方)。事件將沿著響應(yīng)者鏈一直向下傳遞砂轻,直到被接受并作出處理奔誓。一般來(lái)說(shuō),第一響應(yīng)這是個(gè)視圖對(duì)象或者其子類,當(dāng)其被觸摸后事件就交由它處理厨喂,如果他不處理和措,時(shí)間就會(huì)被傳遞給視圖控制器對(duì)象;
UIViewController(如果存在),然后是它的父視圖對(duì)象(superview)蜕煌,以此類推知道頂層視圖派阱。接下來(lái)會(huì)沿著頂層視圖(top view)到窗口(UIwindow 對(duì)象) 再到程序的(UIApplication對(duì)象),如果整個(gè)過(guò)程都沒(méi)有響應(yīng)這個(gè)事件斜纪,則該事件被丟棄贫母,一般情況下,在響應(yīng)鏈中只要有對(duì)象處理事件盒刚,事件就會(huì)被傳遞 ;
典型的響應(yīng)路線圖如: First Responser --> The Window -->The Applicationn --> App Delegate

什么是沙盒(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文件!

談?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ì)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市合冀,隨后出現(xiàn)的幾起案子各薇,更是在濱河造成了極大的恐慌,老刑警劉巖君躺,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峭判,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡棕叫,警方通過(guò)查閱死者的電腦和手機(jī)林螃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)俺泣,“玉大人疗认,你說(shuō)我怎么就攤上這事》疲” “怎么了横漏?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)熟掂。 經(jīng)常有香客問(wèn)我缎浇,道長(zhǎng),這世上最難降的妖魔是什么赴肚? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任素跺,我火速辦了婚禮,結(jié)果婚禮上誉券,老公的妹妹穿的比我還像新娘指厌。我一直安慰自己,他們只是感情好横朋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布仑乌。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晰甚。 梳的紋絲不亂的頭發(fā)上衙传,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音厕九,去河邊找鬼蓖捶。 笑死扁远,一個(gè)胖子當(dāng)著我的面吹牛俊鱼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畅买,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼并闲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了谷羞?” 一聲冷哼從身側(cè)響起帝火,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎湃缎,沒(méi)想到半個(gè)月后犀填,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗓违,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年九巡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹂季。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冕广,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乏盐,到底是詐尸還是另有隱情佳窑,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布父能,位于F島的核電站神凑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏何吝。R本人自食惡果不足惜溉委,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爱榕。 院中可真熱鬧瓣喊,春花似錦、人聲如沸黔酥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至棵帽,卻和暖如春熄求,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逗概。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工弟晚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逾苫。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓卿城,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親铅搓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瑟押,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354