声明:git
文件注释:采用Xcode自动生成的注释格式。segmentfault
// // AppDelegate.h // 项目名称 // // Created by 开发者姓名 on 2018/6/8. // Copyright © 2018年 公司名称. All rights reserved. //
import注释:若是有一个以上的import语句,对这些语句进行分组,每一个分组的注释是可选的。xcode
// Framework #import <UIKit/UIKit.h> // Model #import "WTUser.h" // View #import "WTView.h"
方法注释:Xcode8以后快捷键自动生成(option + command + /)。网络
/** <#Description#> @param application <#application description#> @param launchOptions <#launchOptions description#> @return <#return value description#> */ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
代码块注释:单行的用 “// + 空格” 开头, 多行用“/* */”。架构
实现文件:必须用”#pragma mark -“将方法分组。分组先后优先级:Lifecycle方法 > Public方法 > UI方法 > Data方法 > Event方法 > Private方法(逻辑处理等) > Delegate方法 > 部分Override方法 > Setter方法 > Getter方法。app
#pragma mark - Lifecycle - (instancetype)init {} - (void)viewDidLoad {} - (void)viewWillAppear:(BOOL)animated {} - (void)viewDidAppear:(BOOL)animated {} - (void)viewWillDisappear:(BOOL)animated {} - (void)viewDidDisappear:(BOOL)animated {} - (void)didReceiveMemoryWarning {} - (void)dealloc {} #pragma mark - Public - (void)refreshData {} #pragma mark - UI - (void)initSubViews {} #pragma mark - Data - (void)initData {} - (void)constructData {} #pragma mark - Event - (void)clickButton:(UIButton *)button {} #pragma mark - Private - (CGFloat)calculateHeight {} #pragma mark - UIScrollViewDelegate - (void)scrollViewDidScroll:(UIScrollView *)scrollView {} #pragma mark - Override - (BOOL)needNavigationBar {} #pragma mark - Setter - (void)setWindow:(UIWindow *)window {} #pragma mark - Getter - (UIWindow *)window {}
变量:优先使用属性声明而非变量声明,注意属性修饰符、变量类型、变量之间的间隔。ide
@property (strong, nonatomic) UIWindow *window;
间距要求以下:svn
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if (door.isClosed) { // Do something } else { // Do something } return YES; }
长度要求以下:函数
名称一般不缩写,即便名称很长也要拼写彻底(禁止拼音),然而可以使用少数很是常见的缩写,部分举例以下:工具
经常使用缩写词 | 含义 | 经常使用缩写词 | 含义 |
---|---|---|---|
app | application | max | maximum |
alt | alternate | min | minimum |
calc | calculate | msg | message |
alloc | allocte | rect | rectangle |
dealloc | deallocte | msg | message |
init | initialize | temp | temporary |
int | integer | func | function |
属性本质上是存取方法setter/getter,可进行重写(注意内存管理)。
@property (strong, nonatomic) UIWindow *window; - (void)setWindow:(UIWindow *)window; - (UIWindow *)window;
能够适当的对setter/getter进行别名设置。
@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled;
参数前面的单词要可以描述该参数,而且参数名最好能用描述该参数的单词命名。
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
方法中多个参数可使用适当的介词进行链接。
// 后续多个参数使用with - (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2; // 添加适当介词可以使方法的含义更明确 - (BOOL)lockWhenCondition:(NSInteger)condition beforeDate:(NSDate *)limit; // 第一个参数用了with,后面的参数不使用with - (instancetype)initWithImage:(nullable UIImage *)image highlightedImage:(nullable UIImage *)highlightedImage;
只有在方法返回多个值的时候使用get单词进行明确。
- (void)getLineDash:(nullable CGFloat *)pattern count:(nullable NSInteger *)count phase:(nullable CGFloat *)phase;
方法返回某个对象实例。
+ (instancetype)buttonWithType:(UIButtonType)buttonType;// 类方法建立对象 + (UIApplication *)sharedApplication;// 单例命名
委托或代理方法命名第一个参数最好能相关某个对象。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;
自定义方法和系统方法重名,建议在方法开头加前缀”xx_methodName“。
宏定义也可根据做用范围加上适当前缀,避免命名冲突。
枚举定义时需指定None状态,而且其rawValue通常为起始值0。
// NS_ENUM typedef NS_ENUM(NSInteger, UIStatusBarAnimation) { UIStatusBarAnimationNone = 0, UIStatusBarAnimationFade = 1, UIStatusBarAnimationSlide = 2, } typedef NS_OPTIONS(NSUInteger, UIRemoteNotificationType) { UIRemoteNotificationTypeNone = 0, UIRemoteNotificationTypeBadge = 1 << 0, UIRemoteNotificationTypeSound = 1 << 1, UIRemoteNotificationTypeAlert = 1 << 2, UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3, }
通知的命名通常都是跨文件使用的,需添加项目前缀。
// [相关联类名或者功能模块名] + [will/Did](可选) + [描述] + Notification UIApplicationDidEnterBackgroundNotification UIApplicationWillEnterForegroundNotification
图片文件命名格式:[项目前缀] + [业务] + [类型] + [状态]。
// 常见类型:logol,icon,img // 常见状态:normal,selected,highlight UIImage *image = [UIImage imageNamed:@"wt_mine_setting_normal"];
若是须要忽略警告,建议优先代码push或者pop处理。
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-retain-cycles" // 形成警告的代码 #pragma clang diagnostic pop
若是警告数量过大,检查警告类型以及必要性,可xcode配置忽略此类型警告。步骤:选中工程 -> TARGETS -> Build Settings -> Other Warning Flags。
忽略单个和全局配置稍有差异,以下举例: push/pop Other Warning Flags -Wformat —-> -Wno-format -Wunused-variable —-> -Wno-unused-variable -Wundeclared-selector —-> -Wno-undeclared-selector -Wint-conversion —-> -Wno-int-conversion
git文件管理配置:.gitignore_global为全局配置,而仓库目录下的.gitignore文件仅注明本仓库被git忽略的文件,常见语法以下:
提交信息规范: