在项目开发中,我们不可能对着需求一口气将代码都写好。开发过程中肯定遇到诸如需求变动,业务逻辑沟通,运行环境的切换等这些问题。当项目大的时候,如果木有形成统一的代码规范,在项目交接和开发人员沟通上将会带来很大的麻烦。

  #pragma mark -

  这个标记在iOS开发中用得最多了。其实最主要的是用来进行标记的,当然也有注释的作用在里面。当然我们也可以用//,/* */等常用注释来说明。但是用#pragma mark -不同的是可以将整个文件的函数以类似分组的形式展现。当我们点击Xcode 导航栏上面的文件后面的列表时将会得到如图所示的界面:

这样当其他开发者查看此文件时,可以清晰的看到整个函数分布,也清晰的知道各个功能相关的函数。如果鼠标点击其中的标记可以直接跳到此标记的位置,非常的方便。当进行业务上沟通和调用时非常省时省力。用#pragma mark -还有一个好处就是在开发中我们经常会实现其他类的delegate,datasource,protocol等,如果我们#pragma mark - UITableViewDelegate,当我们用鼠标加上command点击UITableViewDelegate会直接跳到这个delegate定义的地方,可以方便的查看相关方法。个人对#pragma mark - 作用的理解是便于开发者之间相互交流。特别是多人的大项目时,如果大家都按各自喜好随便使用#pragma mark - 那么对于项目开发和维护来说是非常灾难性的。不仅开发者自己不清楚自己的整个文件的结构,当其他开发者进行接手开发时将是件非常头大的事情。由于objc函数命名时具有口语化的特点,函数一看名字就知道其要实现的功能,所以平常开发中只写一些关键性说明的注释,如bool变量的说明,业务处理的逻辑等。结合#pragma mark - 可以很方便的让其他开发者理解。

#waring

  这个更加建议大家使用,Xcode默认支持了将#waring标记以编译警告的形式显示出来。在软件开发中,大家都会用TODO,FIXME,XXX等特殊注释。这些关键字也被很多IDE所支持。如果在代码中加入#warning 此处需要修改 by james,在Xcode的编译警告窗口中看到:

在开发中,我们苦逼程序员的思维不断的被打断,不断的来回切换。比如业务逻辑未定,网络请求地址切换,写死代码进行本地测试,项目联调等操作。最蛋疼的时项目上线后突然发现请求地址不对,本地含有写死的测试数据或者我们需要用到其他项目模块代码时,临时改动了别人代码,但木有改回去。这种情况就属于重大项目事故了。一两个不确定改动,苦逼程序员或许会记住,但是多了之后,那直接是百分之一万会被遗漏的。所以最好的方法是在你不确定的业务,测试数据等地方标上编译警告。以#waring 开头写下原因,标记人,时间等说明信息。这样在项目开发结束后,会有一个专门的时间去消除这些警告,以确保没有遗漏的地方。

  对于依然喜欢用TODO,FIXME,XXX的开发者来说可以,设置下工程的"Build Phases",然后添加New Run Script Build Phase,添加以下代码

KEYWORDS="TODO:|FIXME:|XXX:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/ warning: \$1/"

这样xocde就可以将这些特殊标记以#waring的形式展现出来。

善用#waring,#pragma mark 标记的更多相关文章

  1. #pragma mark 添加分割线 及 其它类似标记 - 转

    #pragma marks Comments containing: MARK: TODO: FIXME: !!!: ???: 除了使用 #pragma mark -添加分割线之外, 以上几种标记均可 ...

  2. layoutSubviews #pragma mark -

    >>>layoutSubviews: layoutSubviews是对sbuviews的重新布局,比如,我们想更新子视图的位置,可以通过调用layoutSubviews方法(不能直接 ...

  3. 二.OC基础--1,对象的存储细节,2,#pragma mark指令,3,函数和对象方法的区别,4,对象和方法之间的关系 ,5.课堂习题

    1,对象的存储细节, 1. 当创建一个对象的时候:Person *p1 = [Person new],做了三件事情: 1,申请堆内存空间: 2,给实例变量初始化: 3,返回所申请空间的首地址; 2. ...

  4. android studio: 实现类似于XCode中的#pragma mark的效果

    代码行数写多了,想找一个指定的方法真困难,关键有时候记不住方法的名字,用Ctrl+O也不好使,突然想到以前做iOS开发时,XCode里有一个#pragma mark的功能,很好用:在代码中定义这样一个 ...

  5. pragma mark - 合成图

    #pragma mark - 合成图 - (UIImage *)getShareImageShell:(UIImage *)shareImage { if (shareImage) { CGSize ...

  6. IOS笔记 #pragma mark的用法和作用(方便查找和导航代码)

    简单的来说就是为了方便查找和导航代码用的.   下面举例如何快速的定位到我已经标识过的代码.     #pragma mark 播放节拍器 - (void) Run:(NSNumber *)tick{ ...

  7. 李洪强iOS开发之OC[015]#pragma mark的使用

    // //  main.m //  14 - #pragma mark的使用 // //  Created by vic fan on 16/7/10. //  Copyright © 2016年 李 ...

  8. IOS笔记 #pragma mark的用法

    简单的来说就是为了方便查找和导航代码用的. 下面举例如何快速的定位到我已经标识过的代码. #pragma mark 播放节拍器 - (void) Run:(NSNumber *)tick { //.. ...

  9. (转)IOS笔记 #pragma mark的用法

    简单的来说就是为了方便查找和导航代码用的.   下面举例如何快速的定位到我已经标识过的代码.     #pragma mark 播放节拍器 - (void) Run:(NSNumber *)tick{ ...

随机推荐

  1. Spring5源码分析之AnnotationConfigApplicationContext

    前言: 主要了解的内容有如下几点: @Qualifier与@Primary注解的使用 Spring中ApplicationContext的作用 BeanFactory与ApplicationConte ...

  2. DateUtil 提供一些常用的时间想法的方法

    package com.opslab.util; import java.text.ParseException;import java.text.SimpleDateFormat;import ja ...

  3. Linux记录-常用统计awk

    #统计第一列ip的个数(uniq -c 打印重复行count计数) cat ip.txt | awk '{print $1}' | sort | uniq -c | sort -rn | head - ...

  4. Flink assignAscendingTimestamps 生成水印的三个重载方法

    先简单介绍一下Timestamp 和Watermark 的概念: 1. Timestamp和Watermark都是基于事件的时间字段生成的 2. Timestamp和Watermark是两个不同的东西 ...

  5. 今天被这个BDE错误搞了半天,不过终于好了,分享一下

    今天正编译程序时,突然就报了这个错误出来,重启电脑都没用,多亏网上高手指教,先把解决方案列于下,供受此累得朋友查阅,自己也留底供查找:"Shared memory conflict ($21 ...

  6. Android Butterknife使用方法总结 IOC框架

    前言: ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤.是大神J ...

  7. JS验证正数字,正则的一种正数规则1

    JS中有一个验证数字的方法,就是!isNAN.NAN是非数字,!在JS里表示不是的意思,所以这个!isNAN就是判断不是非数字,也就是是数字.验证某个字符串是否是数字格式是:!isNaN(字符串)经过 ...

  8. servlet中ServletContainerInitializer的简单说明

    根据官方文档到的说明 public interface ServletContainerInitializer Interface which allows a library/runtime to ...

  9. input 标签鼠标放入输入框补全提示

    JSP: <input type="text" placeholder="eventDesc" value="" id="e ...

  10. LeetCode 102. 二叉树的层次遍历(Binary Tree Level Order Traversal) 8

    102. 二叉树的层次遍历 102. Binary Tree Level Order Traversal 题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 每 ...