前面一段时间,不是在忙离职,就是趁着清明跑去放(fu)松(bai)去了,好久了都没开始真正的写一写iOS相关的一些东西。
整理代码
相信很多人都会在自己的代码中使用#pragma mark来将你代码分成一个个逻辑区块,以便于自己以及以后的同事查找和阅读代码。没有使用#pragma来整理代码且没有做好代码分离和复用的代码对程序员来说简直就是一场灾难。
在这里对#pragma mark 如何使用及如何帮助我们快出查找和阅读代码做一些简单地说明:
#pragma mark -
#pragma mark - UIViewController
-(void)viewDidLoad{...}
#pragma mark -
#pragma mark - IBAction
-(IBAction)cancel:(id)sender{...}
#pragma mark -
#pragma mark - UITableViewDataSource
-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{...}
#pragma mark -
#pragma mark - UITableViewDelegate
-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath{...}
在你的@implementation中使用#pragma mark来将代码分割成逻辑区块。这些逻辑区块不仅仅使得阅读代码本身容易许多,也为Xcode源导航增加了视觉线索。当你点击功能栏的方法那一区块的时候就会出现以下的列表。ps:使用 #pragma mark - 可以增加一行水平分割线
防止警告
#pragma的另外一个还不错的用法估计用的人就比较少了,这里简单介绍一下。
相信很多人都会在代码里面使用一些三方库,目前很多的三方库都会自带很多编译器警告。有些时候你不想看到这些警告或者其实你已经确认没有问题它缺仍然报错的时候,然而Clang提供了一个方便的方法来解决这一切。通过使用#pragma clang diagnostic push/pop,你可以告诉编译器仅仅为某一特定部分的代码(最初的诊断设置在最后的pop被恢复)来忽视特定警告。
比如在使用afnetworking
// completionBlock在AFURLConnectionOperation中被手动的设置为nil来打破保留周期。
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-retain-cycles"
self.completionBlock=^{...};
#pragma clang diagnostic pop
这个来自于AFNetworking的代码是一个不可避免的静态分析器警告的例子。Clang注意到块中指向self的强引用,并警告可能的保留周期。然而,setCompletionBlock的super实现通过在块结束时将强引用设置为nil来解决这个问题。因此我们使用#pragma clang diagnostic push/pop来忽视它。
当然,最好不用用这个方法来把所有的警告都这样忽视了,因为很多警告真的是警告。