业务需求是固定搜索栏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 就不是线程安全的,应该保证一次只能有一个线程访问它。