業務需求是固定搜索欄searchbar在view上,即使滾動也不影響,一開始直接設置frame,但一點擊就會消失掉,不知為什么,網上找不到解決方法,后來想了一下換了一種思路解決了,代碼如下,把搜索欄放到一塊UIView里面,調整UIView的frame來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前綴來表示屬性獲取方法?因為get在Objective-C中通常只用來表示從函數指針返回值的函數:
不要使用new方法,盡管很多時候能用new代替alloc init方法,但這可能會導致調試內存時出現不可預料的問題。Cocoa的規范就是使用alloc init方法,使用new會讓一些讀者困惑。
#import和#include
#import是Cocoa中常用的引用頭文件的方式,它能自動防止重復引用文件,什么時候使用#import,什么時候使用#include呢?
當引用的是一個Objective-C或者Objective-C++的頭文件時,使用#import
當引用的是一個C或者C++的頭文件時,使用#include,這時必須要保證被引用的文件提供了保護域(#define guard)。
1.BOOL在Objective-C中被定義為signed char類型,這意味著一個BOOL類型的變量不僅僅可以表示YES(1)和NO(0)兩個值,所以永遠不要將BOOL類型變量直接和YES比較:
2.nil檢查
因為在Objective-C中向nil對象發送命令是不會拋出異常或者導致崩潰的,只是完全的“什么都不干”,所以,只在程序中使用nil來做邏輯上的檢查。
另外,不要使用諸如nil == Object或者Object == nil的形式來判斷。
3.Thread Safe 線程安全
線程安全的代碼能在多線程或并發任務中被安全的調用,而不會導致任何問題(數據損壞,崩潰,等)。線程不安全的代碼在某個時刻只能在一個上下文中運行。一個線程安全代碼的例子是 NSDictionary 。你可以在同一時間在多個線程中使用它而不會有問題。另一方面,NSMutableDictionary 就不是線程安全的,應該保證一次只能有一個線程訪問它。