作者:zyl910

  手工写文档是一件苦差事,幸好现在有从源码中抽取注释生成文档的专用工具。对于Objective-C来说,目前最好用的工具是appledoc和doxygen。可是这两种工具对于注释的要求略有区别。于是我经过一番摸索,找到了一套能同时兼容这两种工具的注释写法。

  工具简介——
appledoc:简单方便,适于生成apple风格的html文档,及直接集成到xcode帮助(docset)。官网 http://gentlebytes.com/appledoc/ 。
doxygen:功能强大,适于生成html文档与pdf文档。官网 http://www.stack.nl/~dimitri/doxygen/index.html 。

  系统环境——
Mac OS X Lion 10.7.5
Xcode 4.6.2
appledoc 2.1
doxygen 1.8.4
MacTeX-2012

一、注释写法

  提示:这一章主要是参考性内容,比较枯燥。请根据需要来阅读——
对于想简单学一下注释写法的,读前4节就行了;
对于想全面学习appledoc与doxygen均兼容的注释写法的,读前6节就行了;
对于既想使用appledoc,又想使用doxygen增强效果的,请阅读所有的节。

1.1 注释形式

  标准C/C++的注释形式有“//”形式的单行注释 与“/* */”形式的多行注释这两种。
  而appledoc与doxygen的文档化注释是它们的变种,有多种形式。例如appledoc与doxygen均兼容的注释形式有以下7种——

/// Single line comment.

/// Single line comment spreading
/// over multiple lines. /** Single line comment. */ /** Single line comment spreading
* over multiple lines.
*/ /** Single line comment spreading
over multiple lines. No star.
*/ /*! Single line comment. */ /*! Single line comment spreading
over multiple lines.
*/

  虽然appledoc与doxygen都支持。但在平时编写代码时,为了避免风格杂乱的视觉污染,应该固定使用注释形式。

1.1.1 单行注释

  在很多时候只需写一个简要描述就够了,这时最好使用单行注释。推荐格式为——

/// 简要描述.

  appledoc与doxygen均会将单行的“///”注释识别为简要描述。兼容性非常高。

  备注——
1) 文本最好统一以英文句号(.)结尾。这样做有助于代码阅读,明确地得知该段文本已经结束,而且有助于避免乱码时的换行符丢失问题。
2) 不要连续多行使用“///”。doxygen在默认情况下,会将多行的“///”当作详细描述,而没有简要注释. 虽然可以修改doxygen的配置以解决上述问题,但多行“///”本身是违背“简要描述”这个初衷的.

1.1.2 多行注释

  当需要写详细描述时,这时就需要使用多行注释了。推荐格式为——

/** 简要描述.
*
* 详细描述或其他.
*/

  对于appledoc与使用了JAVADOC_AUTOBRIEF参数的doxygen来说,它们均会将注释中的第一段识别为简要描述,然后将后面的段识别为详细描述.

  其实doxygen的标准多行注释为——

/**
* @brief 简要描述.
*
* 详细描述或其他.
*/

  可惜appledoc对@brief指令的支持存在缺陷——@brief不能出现类、协议的注释中,会导致后续内容丢失。 @brief多行注释仅能安全的用在属性、方法的注释中。

  备注——
1) 多行注释存在“段”的概念,以内容为空的行作为分段依据。如果没有空行隔开的话,会将连续有内容的行连接起来组成一段.
2) 如果省略中间各行行首的星号(*),appledoc与doxygen也能识别。当考虑到注释缩进、美观性、兼容性,还是建议不要省略行首星号。

1.1.3 行尾注释(仅doxygen)

  在对枚举、结构体等类型的成员进行注释时,为了使内容更加紧凑,我们一般喜欢在行尾写注释。
  可惜目前仅有doxygen支持行尾注释,而appledoc不支持。

  doxygen支持以下4种行尾注释——

/**< 行尾注释1. appledoc不支持会变为下一项的注释, doxygen 支持, 根据英文句号自动切分简要描述与详细描述. */
/*!< 行尾注释2. appledoc不支持会变为下一项的注释, doxygen 支持, 会全部当作详细描述, 而缺少简要描述. */
///< 行尾注释3. appledoc不支持会变为下一项的注释, doxygen 支持.
//!< 行尾注释4. appledoc不支持会会忽略, doxygen 支持.

  为了避免appledoc误将行尾注释当作下一项的注释,故推荐第4种注释——既以“//!<”开头的注释。

1.2 类(协议、分类)的注释

  对于类(协议、分类)来说,一般只需要写简要描述就行了,这时可以使用单行注释——

/// 文档A.
@interface DocA : NSObject

  当需要留下详细描述时,可换成多行注释——

/** 文档B.
*
* 文档B的详细描述.
*/
@interface DocB : NSObject

1.3 属性的注释

  对于属性来说,本来使用行尾注释是最好的,能使内容更加紧凑。可惜目前appledoc不支持行尾注释。只好退而求其次,选择单行注释了——

/// 数值属性.
@property (nonatomic,assign) NSInteger num;

  当需要留下详细描述时,可换成多行注释——

/**
* @brief 字符串属性.
*
* 属性的详细描述.
*/
@property (nonatomic,strong) NSString* str;

1.4 方法的注释

  对于没有参数、返回值的简单方法,可以使用单行注释——

/// 简单方法.
- (void)someMethod;

  若方法具有参数或返回值,这时就得使用多行注释了——

/**
* @brief 带整数参数的方法.
*
* @param value 值.
*
* @return 返回value.
*/
- (int)someMethodByInt:(int)value;

  指令说明——
@param <name> <description>: 参数描述.
@return <description>: 返回值描述.

  由于方法注释需要填写的内容较多(参数列表与返回值等),所以现在有很多插件可以帮忙生成方法的注释,而这些插件一般是使用@brief多行注释的。例如参考文献中的《Xcode4快速Doxygen文档注释 — 简明图文教程(3分钟后爽歪歪)》.

  在某些时候,我们还需要在方法注释种填写异常、参见、警告 等信息——

/**
* @brief 带字符串参数的方法.
*
* @param value 值.
*
* @return 返回value.
*
* @exception NSException 可能抛出的异常.
*
* @see someMethod
* @see someMethodByInt:
* @warning 警告: appledoc中显示为蓝色背景, Doxygen中显示为红色竖条.
* @bug 缺陷: appledoc中显示为黄色背景, Doxygen中显示为绿色竖条.
*/
- (NSString*)someMethodByStr:(NSString*)value;

  指令说明——
@exception <name> <description>: 异常描述.
@see <name>: 参见. 具体用法详见 1.5.2 @see、@sa(参见) .
@warning <text>: 警告.
@bug <text>: 警告.

1.5 appledoc、doxygen均支持的指令

  指令一般以“@”开头,也可以使用“\”等符号开头。 若想在文本中使用“@”、“\”等符号,可使用“\”转义符,例如“\@”、“\\”等。

1.5.1 指令列表

  指令在appledoc中被称作“Directive”,而在doxygen中被称作“Command”。
  appledoc没有专门指令参考文档,仅在《Comments formatting style》中给了几个简单示例。
  而doxygen有详细的指令参考文档,详见《Special Commands》。

  经过测试,我发现下列指令在appledoc与doxygen中均是有效的——
@brief <title>: 简要注释. appledoc中仅对属性、方法有效,对类、协议 无效,会造成后续内容解析失败.
@param <name> <description>: 参数描述.
@return <description>: 返回值描述.
@exception <name> <description>: 异常描述.
@see <name>: 参见.
@sa <name>: 参见. 同@see.
@warning <text>: 警告.
@bug <text>: 警告.
@name <title>: 组名. 用于给成员们分组, 既文档中Tasks区的子类别.

1.5.2 @see、@sa(参见)

  参见指令的格式为——
@see <name>
@sa <name>

  在保证appledoc与doxygen均兼容的情况下,<name>可为——
1) 当前类(或协议)中的属性或方法。(注意Objective-C方法签名的写法,一般为“方法名:参数1:参数2:⋯⋯”的格式)
2) 类(或协议)名。(注意appledoc不支持当前类)

  虽然appledoc与doxygen都支持参见“其他类或协议中的成员”,可惜它们的写法不同,而且相互不兼容——
appledoc:使用Objective-C消息语法,既“[类 成员]”格式。
doxygen:使用传统的对象成员访问语法,既“类.成员”格式。

  注意本指令与@brief指令存在同样的问题——appledoc中仅对属性、方法有效,对类、协议 无效,会造成后续内容解析失败。 这时有两种处理策略——
1) 将参见指令放在注释的最后面,避免内容丢失,且能保证在doxygen中的效果.
2) 使用链接来代替参见。详见 1.6.4 链接。

1.6 appledoc、doxygen均支持的排版格式

  无格式的纯文本看起来比较费劲,得进行格式排版,以提高文档的组织性与表现力。appledoc与doxygen均有自己的一套约定——
appledoc可参考《Comments formatting style》。
doxygen可参考《Markdown support》。

  本节将会介绍appledoc与doxygen均支持的排版格式。

1.6.1 代码文本

  有时需要在一段话中引入一小段代码,这时可以用重音符(`)将那一段代码给包起来。例如——

/**
* 引用短代码, 如 `someMethodByStr:` .
*/

1.6.2 代码块

  代码块适用于需要在注释中放置多行代码的情况。具体办法是在每行内容的前面加一个tab字符,例如——

/**
* 示例代码:
*
* int sum=0;
* for(int i=1; i<=10; ++i) {
* sum += i;
* }
*/

  因为空格与Tab字符均显示为空白,不易区分。于是用<space>、<tab>表达空格与tab字符,上述注释实际为——

/**
<space>*<space>示例代码:
<space>*
<space>*<space><tab>int sum=0;
<space>*<space><tab>for(int i=1; i<=10; ++i) {
<space>*<space><tab><tab>sum += i;
<space>*<space><tab>}
<space>*/

  因每行注释开始的星号(*)与内容之间必须用空白型字符隔开,所以平时用空格或tab字符都行。但在使用代码块时,为了避免对Tab字符的误判,内容最好严格以“<space><tab>”开头(既每行以“<space>*<space><tab>”开头)。

  备注——
1) 注意段的概念,代码块与前后文本之间应该空开一行。
2) appledoc与doxygen还支持将4个空格当作一个tab字符。但4个字符的录入、维护起来会更费力一些,不推荐使用。

1.6.2.1 xcode中输入代码块

  在xcode中,按下Tab键时,会自动整合前面的空格字符,导致代码块排版失效。所以建议先在多行注释中粘贴代码,然后在行前输入“*<space><tab>”。范例如下——

  首先,最初的注释是这样的——

/**
* @brief 简要描述.
*
* 详细描述或其他.
*/

  第一步,在多行注释中粘贴代码,注意xcode会自动对新粘贴内容进行排版,在每一行的前面加一个空格——

/**
* @brief 简要描述.
*
* 详细描述或其他.
int sum=0;
for(int i=1; i<=10; ++i) {
sum += i;
}
*/

  第二步,补齐行首。复制“*<space><tab>”,对于先前所粘贴的那段代码,在每一行的第二个字符处粘贴,以形成“<space>*<space><tab>”开头的代码块格式——

/**
* @brief 简要描述.
*
* 详细描述或其他.
* int sum=0;
* for(int i=1; i<=10; ++i) {
* sum += i;
* }
*/

  第三步,修尾。增加空行,增加“代码:”行,提示下面是代码——

/**
* @brief 简要描述.
*
* 详细描述或其他.
*
* 代码:
*
* int sum=0;
* for(int i=1; i<=10; ++i) {
* sum += i;
* }
*/

1.6.3 列表

1.6.3.1 无序列表

  在内容的每一行开头使用“-”、“+”或“*”字符,可创建无序列表。例如——

/**
* 无序列表:
*
* - abc
* - xyz
* - rgb
*/

1.6.3.2 有序列表

  使用数字与小数点,可创建有序列表。例如——

/**
* 有序列表:
*
* 1. first.
* 2. second.
* 3. third.
*/

1.6.3.3 多级列表

  使用tab字符配合使用无序列表或多级列表,可创建多级列表。例如——

/**
* 多级列表:
*
* - xyz
* - x
* - y
* - z
* - rgb
* - red
* 1. first.
* 1. alpha.
* 2. beta.
* 2. second.
* 3. third.
* - green
* - blue
*/

1.6.4 链接

  链接有三种形式——
1) 直接链接。格式为 <link>。会将链接地址直接作为文本来显示。
2) 文本链接。格式为 [text](<link>)。使用自定义的文本作为链接名。
3) 交叉引用链接。比较复杂,且难以兼容appledoc与doxygen,故本文不讨论。

1.6.4.1 Url

  在注释中直接写上url便会自动创建链接,例如——

/**
* http://appledoc.gentlebytes.com/ : 直接写url链接.
*/

  还可以使用文本链接形式——

/**
* [Doxygen](http://www.stack.nl/~dimitri/doxygen/) : 为链接提供文本 .
*/

1.6.4.2 类与协议

  在注释中直接写上类(或协议)名,并注意左右两侧留空格,appledoc与doxygen便会自动生成指向该类(或协议)的链接。例如——

/**
* DocA : 类.
*/

  但对于文本链接来说,appledoc与doxygen的写法不同——

/**
* - [文档B](DocB) : 类的链接文本.(仅appledoc)
* - [文档B](@ref DocB) : 为\@ref链接提供文本 (仅doxygen. appledoc会把\@ref当作文本而生成错误的链接).
*/

  建议还是使用直接链接吧。

1.6.4.3 属性与方法(仅appledoc)

  如果注释中出现了 [类 成员],appledoc会自动的为其创建链接,但doxygen不支持此功能。

  如果注释中出现当前类的属性或方法名,appledoc会自动的为其创建链接,但doxygen不支持此功能。而且appledoc还存在Bug——如果在同一片注释中出现了[类 成员],那么当前类的的属性或方法的链接会失效。

  这么不稳定的功能还是暂时别用吧。

1.7 常用的doxygen注释示例

  doxygen的注释功能多的令人眼花缭乱,这里还是介绍几种常用写法吧。

1.7.1 文件头

  一般格式为——

/**
* @file MyDocViewController.h
* @brief 主页面.
* @author [zyl910](http://www.cnblogs.com/zyl910/)
* @version 1.0
* @date 2013-06-07
*
* # update (更新日志)
*
* [2013-06-07] <zyl910> v1.0
*
* + v1.0版发布.
*
*/

  指令说明——
@file [<name>]:文件名.
@author <list of authors>:作者. 这里我使用了链接,详见 1.6.4 链接 .
@version <version number>:版本号.
@date <date description>:日期.

  以井号(#)开头的行表示是标题。如果有1个井号(#),表示是一级标题。如果有2个井号(##),表示是二级标题,以此类推。

1.7.2 枚举、结构体、联合体与typedef

  对于枚举、结构体、联合体等类型,一般可选用单行注释或多行注释。对于其中的成员,推荐使用行尾注释。例如——

/// Objective-C 文档工具枚举 (枚举, 仅Doxygen).
typedef enum _ObjCDocToolEnum{
ObjCDocToolEnumAppleDoc = 1, //!< AppleDoc. http://appledoc.gentlebytes.com/ .
ObjCDocToolEnumDoxygen, //!< Doxygen. http://www.stack.nl/~dimitri/doxygen/ .
}ObjCDocToolEnum; /** 整数矩形 (结构体, 仅Doxygen).
*
* 结构体的详细描述.
*/
typedef struct _RectInt {
int x; //!< 横坐标.
int y; //!< 纵坐标.
int width; //!< 宽度.
int height; //!< 高度.
}RectInt, *PRectInt; //!< 整数矩形的指针.
typedef const RectInt* PCRectInt; //!< 整数矩形的常量指针. /// 浮点数的字节(联合体, 仅Doxygen).
typedef union _FloatByte {
float f; //!< 单精度浮点数.
unsigned char bytes[4]; //!< 4个字节.
} FloatByte;

  注意行尾注释是对前一项的注释,所以一定要使用分号(;)或逗号(,)标明本项成员定义好后,再写行尾注释。包括最后一个成员。

  在定义结构体时,一般还需要定义其相关的指针类型与常量指针类型——
定义指针类型时,可以跟结构体的定义写在一起,利用行尾注释的特点来注释。
定义常量指针类型时,需要单独写一行typedef,并使用行尾注释。

1.7.3 宏

  对于常量形式的简单宏,推荐使用行尾注释。例如——

#define BUFSIZE    100    //!< 缓冲区大小 (简单宏, 仅Doxygen).

  对于带参数的宏,可参考“方法的注释”写多行注释。例如——

/**
* @brief 最小值 (参数宏, 仅Doxygen).
*
* @param a 值a.
* @param b 值b.
*
* @return 返回两者中的最小值.
*/
#define min(a,b) ( ((a)<(b)) ? (a) : (b) )

1.7.4 函数指针与块函数(Block Objects)

  对于函数指针与块函数,也可参考“方法的注释”写多行注释。例如——

/**
* @brief 动作回调函数.
*
* @param sender 发送者.
* @param userdata 自定义数据.
*/
typedef void (*ActionCallback)(void* sender, void* userdata); /**
* @brief 动作块函数.
*
* @param sender 发送者.
* @param userdata 自定义数据.
*/
typedef void (^ActionHandler)(id sender, id userdata);

1.7.5 成员变量

  对于成员变量,推荐使用行尾注释。例如——

@interface MyDocViewController : UIViewController {
@private
int _privateInt; //!< 私有成员变量 (仅Doxygen具有EXTRACT_PRIVATE标识时, 会被归类为“Private 属性”). @protected
int _protectedInt; //!< protected成员变量 (仅Doxygen, 会被归类为“Protected 属性”).
id<MyDocDelegate> _delegate; //!< 委托变量. @package
int _packageInt; //!< 包内成员变量 (仅Doxygen, 会被归类为“Protected 属性”). @public
int _publicInt; //!< 公开成员变量 (仅Doxygen, 会被归类为“Public 属性”).
}

二、编码演练

  前面说了很多理论知识,现在创建一个项目来演练一下吧。

  打开Xcode,新建一个名为“MyDoc”的“Single View Application”的iOS项目。

  然后打开MyDocViewController.h,在里面练习注释。
  全部代码——

 MyDocViewController.h

  代码写好后,便可以使用appledoc或doxygen生成文档了,详见下面两章。

三、使用appledoc生成文档(docset、html)

3.1 安装appledoc

  安装appledoc十分简单。打开终端,输入以下命令——

git clone git://github.com/tomaz/appledoc.git
cd appledoc
sudo sh install-appledoc.sh

3.2 生成docset

  对于最新版本的appledoc来说,它默认时是生成docset文档并集成到xcode。
  在终端中使用cd命令进入项目的文件夹,然后执行下列命令——

appledoc --output ./doc --project-name objcdoc --project-company "zyl910" --company-id "cn.com.zyl910" .

  注——
--output ./doc:设置输出目录为“./doc”。
--project-name objcdoc:设置项目名为“objcdoc”。
--project-company "zyl910":设置公司名为“zyl910”。
--company-id "cn.com.zyl910":设置公司id为“cn.com.zyl910”。
.:当前目录。

  当该命令完成后,打开xcode中的Organizer - Documentation,会发现其中新增了帮助文档——

3.3 生成html

  当需要html文档时,可以加上“--no-create-docset”——

appledoc --no-create-docset --output ./doc --project-name objcdoc --project-company "zyl910" --company-id "cn.com.zyl910" .

  当该命令完成后,使用浏览器打开doc/html/index.html——

四、使用doxygen生成文档(html、pdf)

4.1 安装doxygen

  doxygen支持源码编译安装与dmg安装。想省事的话,可以选择dmg安装。去doxygen官网(http://www.stack.nl/~dimitri/doxygen/download.html)下载最新的dmg。
  dmg下载下来后,双击加载dmg,然后把.app文件拖入应用程序文件夹,便完成了安装。

4.2 生成html

  doxygen有图形界面,可通过Launchpad打开。

  在step 1中选择好项目的路径。
  step 2默认是Wizard->Project页面,在其中——
1) 在“Project name”中填写项目名。
2) 勾选“Sacn recursively”,扫描所有的子文件夹。
3) 在“Destination directory”中填写好文档的输出目录。这里我填的是“docs”。

  点击中间的“Expert”切换Expert->Project页面,在其中——
1) 将“OUTPUT_LANGUAGE”设为“Chinese”,使用简体中文。
2) 勾选“JAVADOC_AUTOBRIEF”,自动将注释的第1段识别为简要描述。

  点击中间的“Run”切换Run页面,然后点击“Run doxygen”按钮生成文档。

  当文档生成完毕后,使用浏览器打开docs/html/index.html——

4.3 生成pdf

  doxygen默认会为生成pdf做好准备。切换到Wizard->Project,会发现它自动勾选了“LaTex”与“as intermediate format for hyperlinked PDF”。

  doxygen本身并不能直接输出pdf文件,而是生成了latex目录,其中有一个 makefile 文件。若系统中装好了pdflatex,可在latex目录中运行“make”命令来生成pdf文件。
  怎样才能装好pdflatex呢?mac平台可安装MacTeX。打开 http://www.tug.org/mactex/ ,下载  MacTeX.pkg (约2.1GB)。MacTeX.pkg下载好后,可双击运行,根据向导来安装。

  环境装好之后,当在latex目录中运行“make”命令来生成pdf文件时,你会发现——纯英文文档能顺利生成pdf;而含有中文时,不能顺利生成pdf文件。

  对于latex排版,doxygen其实已经做了很多准备,比如——源文件是UTF-8编码,并默认使用了utf8 package。理论上是支持多国语言的。
  可对于中文来说,还需要加载 CJKutf8 package,并配置好CJK环境。这才能顺利的使用中文。

  用文本编辑器打开docxygen生成的latex目录中的refman.tex。找到“\begin{document}”这一行,将其修改为——

\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{gbsn}

  然后再找到“\end{document}”这一行,将其修改为——

\end{CJK}
\end{document}

  保存并关闭refman.tex。
  然后打开终端,使用cd命令进入latex目录,然后执行“make”命令。

  执行完毕后后,该目录中会出现“refman.pdf”——

参考文献——
[appledoc]《Comments formatting style》. Gentle Bytes. http://gentlebytes.com/appledoc-docs-comments/
[doxygen]《Markdown support》. doxygen. http://www.stack.nl/~dimitri/doxygen/manual/markdown.html
[doxygen]《Special Commands》. doxygen. http://www.stack.nl/~dimitri/doxygen/manual/commands.html
《Amazing Apple-like Documentation》. 2011-11-29. http://www.cocoanetics.com/2011/11/amazing-apple-like-documentation/
《使用Objective-C的文档生成工具:appledoc》. 唐巧, 2012-02-01. http://blog.devtang.com/blog/2012/02/01/use-appledoc-to-generate-xcode-doc/
《关于查看自已写的方法的“描述”(AppleDoc)》. Rainbird, 2012-11-25.http://blog.cnrainbird.com/index.php/2012/11/25/guan_yu_cha_kan_zi_yi_xie_de_fang_fa_de_miao_shu_appledoc/
《用Doxygen为Objective-C代码生成文档》. Seven's, 2011-11-20. http://www.dreamingwish.com/dream-2011/use-doxygen-to-generate-documentation-Objective-C-code.html
《Xcode4快速Doxygen文档注释 — 简明图文教程(3分钟后爽歪歪)》. chukong-inc, 2012-05-16. http://blog.chukong-inc.com/index.php/2012/05/16/xcode4_fast_doxygen/
《使用doxygen生成中文pdf文档》. zyl910, 2013-06-02. http://www.cnblogs.com/zyl910/archive/2013/06/02/doxygen_pdf_chinese.html

源码下载—— 
http://files.cnblogs.com/zyl910/objcdoc.zip

作者:zyl910
版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0.

Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成的更多相关文章

  1. 使用Objective-C的文档生成工具:appledoc

    使用Objective-C的文档生成工具:appledoc 前言 做项目的人多了,就需要文档了.今天开始尝试写一些项目文档.但是就源代码来说,文档最好和源码在一起,这样更新起来更加方便和顺手.象 Ja ...

  2. 【原创】利用doxygen来管理项目文档或注释

    一.doxygen应用场景: doxygen可以用来管理目前主流的编程语言的注释而形成文档系统.(包括C, C++, C#, Objective-C, IDL, Java, VHDL, PHP, Py ...

  3. appledoc:Objective-C注释文档生成工具

    appledoc是帮助Objective-C开发者从特殊格式的源代码注释中生成类似apple资源代码帮助文档的命令行工具. 安装和使用都非常简单: 安装 git clone git://github. ...

  4. 【iOS】objective-c 文档生成工具 appledoc

    最近做ios framework的一些测试,提供给其他开发者使用的framework,API文档变得更加重要,以前没有接触过,这次尝试使用了一把appledoc来生成一下文档,感觉还不错. 首先,是从 ...

  5. 技术文档生成工具:appledoc

    做项目一般都会要求写技术文档,特别是提供SDK或者基础组件的.如果手写这类技术文档的话,工作量比编写代码也少不了多少.比如 Java 语言本身就自带 javadoc 命令,可以从源码中抽取文档.本篇我 ...

  6. 文档生成工具 appledoc

    参考文章 1.安装: $ git clone git://github.com/tomaz/appledoc.git $ cd appledoc $ sudo sh install-appledoc. ...

  7. JsDoc脚本注释文档生成

    使用jsDoc可使用特定注释,将注释的内容生成文档,可用于生成脚本库的API文档 jsdoc 文档:   http://usejsdoc.org/

  8. 【摘抄】将xml注释文档生成网页

    config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath(&quo ...

  9. [C] c99int(让VC等编译器自动兼容C99的整数类型)V1.02。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释

    新版本—— http://www.cnblogs.com/zyl910/p/zlstdint_v100.html[C] zlstdint(让VC.TC等编译器自动兼容C99的整数类型)V1.0.支持T ...

随机推荐

  1. Javascript 判断网页横竖屏

    本篇文章由:http://xinpure.com/javascript-to-determine-page-anyway-screen/ Html5 流行至今,自适应的网站已经多如牛毛,但是横竖屏的切 ...

  2. CGGeometry Reference

    CGRectUnionCGRectUnion接受两个CGRect结构体作为参数并且返回一个能够包含这两个矩形的最小矩形.听起来可能没什么,我相信你也可以用几行代码轻松实现这个功能,不过 CGGeome ...

  3. idea lib下有jar包但是仍然报错 找不到类

    现象: idea lib下有jar包但是仍然报错 找不到类 但是有个奇怪现象 同样的配置下项目在eclipse中可以正常编译 启动. package com.puhui.car.aspect; imp ...

  4. sql中的SET NOCOUNT ON/OFF

    当 SET NOCOUNT 为 ON 时,不返回计数(表示受Transact-SQL 语句影响的行数). 当 SET NOCOUNT 为 OFF 时,返回计数(默认为OFF). 即使当 SET NOC ...

  5. atitit.提升性能AppCache

    atitit.提升性能AppCache 1.1. 起源1 2. 离线存储2 3. AppCache2 3.1. Appcache事件点如图2 3.2. Manifest文件4 3.3. 自动化工具4 ...

  6. Atitit.判断元素是否显示隐藏在父元素 overflow

    Atitit.判断元素是否显示隐藏在父元素 overflow 1.1. scrollTop  指的是元素的滚动条顶端距离原生基线的高度...1 1.2. 判断元素是否显示隐藏在父元素  $(next) ...

  7. atitit.验证码识别step4--------图形二值化 灰度化

    atitit.验证码识别step4--------图形二值化 灰度化 1. 常见二值化的方法原理总结 1 1.1. 方法一:该方法非常简单,对RGB彩色图像灰度化以后,扫描图像的每个像素值,值小于12 ...

  8. Oracle之配置客户端登陆多个远程数据库

    一.引言 一直搞不明白Oracle数据库的客户端是怎么回事,怎么配置,前几天由于工作中需要用到Oracle,而且需要连接两个不同的数据库,就通过上网和请教同事终于把客户端的配置搞定了,记录之,学习之 ...

  9. mysql乐观锁和悲观锁

    在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突.这就是著名的并发性问题. 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作. 乐观锁:假设不会发生并发冲突,只在提交 ...

  10. Swift培训

    本篇是Swift内部培训整理的PPT材料,主要内容来源于苹果Swift编程语言官方教程,参考了网上的一些视频课程内容.在教程介绍完之后,本人附带实现了一个项目开发中的常用场景的Demo:基于导航栏和T ...