2016.11.23

2016-11-23  本文已影响15人  dslCoding

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

上一篇下一篇

猜你喜欢

热点阅读