業(yè)務(wù)需求是固定搜索欄searchbar在view上,即使?jié)L動(dòng)也不影響,一開(kāi)始直接設(shè)置frame,但一點(diǎn)擊就會(huì)消失掉,不知為什么,網(wǎng)上找不到解決方法,后來(lái)想了一下?lián)Q了一種思路解決了,代碼如下,把搜索欄放到一塊UIView里面,調(diào)整UIView的frame來(lái)addsubview到你需要的位置,代碼如下
UIView*searchBarView = [[UIViewalloc]initWithFrame:CGRectMake(0.0,64.0,ScreenWidth,_searchController.searchBar.frame.size.height)];
[searchBarViewaddSubview:_searchController.searchBar];
//? ? _searchController.searchBar.frame = CGRectMake(0.0, 64.0 , ScreenWidth,44.0);
[self.viewaddSubview:searchBarView];
為什么Objective-C中不適用get前綴來(lái)表示屬性獲取方法?因?yàn)間et在Objective-C中通常只用來(lái)表示從函數(shù)指針?lè)祷刂档暮瘮?shù):
不要使用new方法,盡管很多時(shí)候能用new代替alloc init方法,但這可能會(huì)導(dǎo)致調(diào)試內(nèi)存時(shí)出現(xiàn)不可預(yù)料的問(wèn)題。Cocoa的規(guī)范就是使用alloc init方法,使用new會(huì)讓一些讀者困惑。
#import和#include
#import是Cocoa中常用的引用頭文件的方式,它能自動(dòng)防止重復(fù)引用文件,什么時(shí)候使用#import,什么時(shí)候使用#include呢?
當(dāng)引用的是一個(gè)Objective-C或者Objective-C++的頭文件時(shí),使用#import
當(dāng)引用的是一個(gè)C或者C++的頭文件時(shí),使用#include,這時(shí)必須要保證被引用的文件提供了保護(hù)域(#define guard)。
1.BOOL在Objective-C中被定義為signed char類型,這意味著一個(gè)BOOL類型的變量不僅僅可以表示YES(1)和NO(0)兩個(gè)值,所以永遠(yuǎn)不要將BOOL類型變量直接和YES比較:
2.nil檢查
因?yàn)樵贠bjective-C中向nil對(duì)象發(fā)送命令是不會(huì)拋出異?;蛘邔?dǎo)致崩潰的,只是完全的“什么都不干”,所以,只在程序中使用nil來(lái)做邏輯上的檢查。
另外,不要使用諸如nil == Object或者Object == nil的形式來(lái)判斷。
3.Thread Safe 線程安全
線程安全的代碼能在多線程或并發(fā)任務(wù)中被安全的調(diào)用,而不會(huì)導(dǎo)致任何問(wèn)題(數(shù)據(jù)損壞,崩潰,等)。線程不安全的代碼在某個(gè)時(shí)刻只能在一個(gè)上下文中運(yùn)行。一個(gè)線程安全代碼的例子是 NSDictionary 。你可以在同一時(shí)間在多個(gè)線程中使用它而不會(huì)有問(wèn)題。另一方面,NSMutableDictionary 就不是線程安全的,應(yīng)該保證一次只能有一個(gè)線程訪問(wèn)它。