Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS - 代码Review(一)

iOS - 代码Review(一)

作者头像
Wilbur-L
修改于 2021-10-27 06:27:20
修改于 2021-10-27 06:27:20
64300
代码可运行
举报
文章被收录于专栏:iOS底层原理iOS底层原理
运行总次数:0
代码可运行

一·代码命名基础

1.清晰且简短

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insertObject: atIndex: //通过
insert: at: //不清楚在插入什么
removeObjectAtIndex: //通过,即使有点长 代码命名优先级 清晰>简短
removeObject: //通过
remove: //不清楚 正在删除什么

2.不要缩写,哪怕很长

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
destinationSelection //驼峰命名 不缩写 通过
destSel //不清楚
setBackgroundColor: //设置背景颜色 通过
setBkgColor: //不清晰

注:虽然有些写法是缩写,但需要考虑到遇到你的代码或函数名称可能是不同语言文化背景习惯的人时候

3.一致&避免与系统函数冲突

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (NSInterger)tag //tag 已经在NSView,NSCell,NSControll 中已经有定义
- (void)setStringValue:(NSStirng *)str //在UIKit Cocoa中 声明property会具有setter getter 除非你要重写

4.排版约定 (每个公司的代码规范会有些不同,但大都遵循一定的规范)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
在一份view.m文件中应遵循统一的排版
//
//  .m
//  app
//
//  Created by you on 202x/x/xx.
//  Copyright © 2021 you. All rights reserved.
//

#import "Foundation.h" //引入头文件
#import "NetWorkManager" //网络层单独封装
@interface xxx()<遵循协议,UICollectionViewDelegate,UICollectionViewDataSource>
//UI层
@property (nonatomic, strong) UIButton *XXXCloseButton;
@property (nonatomic, strong) UIView *backgroundView;
//网络参数层
@property (nonatomic, storng) NSArray *dataArray; 
@property (nonatomic, assign) BOOL didPayStatus;
@end

@implementation xxx
#pragma mark - 生命周期

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDidAppear:animated];
}

- (void)viewDidLoad {
    [super viewDidLoad];
}

#pragma mark - 初始化
- (instancetype)init {
    if (self = [super init]) {
        [self initUI];
    }
    return self;
}

- (void)initUI {
    _dataArray = [NetWorkManager sendPostNetWorkRequest];
    [self addSubview:self.backgroundView];
    [self addSubview:self.XXXCloseButton];
}

#pragma mark - tableView协议&代理

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kCell forIndexPath:indexPath];
    cell.model = self.model[indexPath.row];
    return cell;
} //根据MVC架构需要把数据通过Model传给视图
//每一个函数间隔一行
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return self.model.count; 
}

#pragma mark - Action&Selector

- (void)yourNamedFuntion:(UIButton *)sender {
    NSLog(@"按钮方法");
}

#pragma mark - 懒加载 //添加标记容易找
//懒加载放在最后
- (UIView *)backgroundView {
    if(!_backgroundView) {
        _backgroundView = [[UIView alloc]init];
        _backgroundView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight); //宽高使用宏定义 x,y默认0
        _backgroundView.bottom = xx //添加x y 约束
        _backgroundView.left = xx //添加x y 约束
        _backgroundView.backgroundColor = [UIColor blueColor];
    }
    return _backgroundView;
}
//按照视图加载顺序 addSubview 1.背景 addSubview 2按钮
- (UIButton *)XXXCloseButton {
    if (!_XXXCloseButton) {
        _XXXCloseButton = [[UIButton alloc]init];
        _XXXCloseButton.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight); //请把括号内的空格也填好
        _XXXCloseButton.layer.cornerRadius = 8;
        [_XXXCloseButton addTarget:self action:@selector(yourNamedFuntion:) forControlEvents:UIControlEventTouchUpInside];
    }
    return _XXXCloseButton
}

@end

二·命名方法

1.如果函数会对当前对象操作,以动词开头

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 - (void)invokeWithTarget:(id)target;
 - (void)selectTabViewIndex:(NSInterger)index;
 //不要使用do does 这些助动词

2.如果方法返回接受者对属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (NSSize)cellSize;
- (NSSize)calcCellSize; //不清晰
- (NSSize)getCellSize; //不要使用助动词

3.参数前使用关键字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 - (void)buttonAction:(int)index name:(NSString *)name; //通过
 - (void)buttonAction:(int)index :(NSString *)name; //不能忽略关键字

4.当函数只有一个参数时候需要提前描述

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 - (void)viewWithTag:(NSInterger)aTag;

5.当重写构造方法时候需要把参数添加到末尾

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (instancetype)initWithFrame:(CGRect)frame
- (instancetype)initWithFrame:(CGRect)frame dataArray:(NSArray *)dataArray;

6.不要通过And来链接属性关键字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (int)runModelForDirectory:(NSString *)path andFile:(NSString *)fileName; //不通过
- (int)runModelForDirectory:(NSString *)path WithFile:(NSString *)fileName; //通过
//通常来说一般函数需要的参数最好不要超过4个

7.通知KVO和异常

[关联类的名称] + [Did | Will] + [房间] + 通知

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static NSString *const CurrenClassNameWillMoveNotification = @"CurrenClassNameWillMoveNotification";
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(turnBackToRoom:) name:@"CurrenClassNameWillMoveNotification" object:nil];

8.枚举

对具有整数相关的常数使用枚举

有命名枚举

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef enum : NSInteger{
    acceptOrder = 0,
    denyOrder,
    refundOrder,
    rejectOrder,
    finishedOrder
}status;

无命名枚举

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enum {
    acceptOrder = 0,
    denyOrder = 1 << 0,
    refundOrder = 1 << 1,
    rejectOrder = 1 << 2,
    finishedOrder = 1 << 3,
};

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
IOS基金会_ UICollectionView简单易用
一种是继承UICollectionViewController,这个Controller会自带一个UICollectionView。
全栈程序员站长
2022/07/06
3740
iOS流布局UICollectionView系列四——自定义FlowLayout进行瀑布流布局
        前几篇博客从UICollectionView的基础应用到设置UICollectionViewFlowLayout更加灵活的进行布局,但都限制在系统为我们准备好的布局框架中,还是有一些局限性,例如,如果我要进行瀑布流似的不定高布局,前面的方法就很难满足我们的需求了,如下:
珲少
2018/08/15
3.2K0
iOS流布局UICollectionView系列四——自定义FlowLayout进行瀑布流布局
工匠人iOS 代码规范
在多个不同的运算符同时存在的时候应该合理使用括号,不要盲目依赖操作符优先级。 因为有的时候不能保证阅读你代码的人就一定能了解你写的算式里面所有操作符的优先级。
用户3098942
2020/09/14
1.1K0
工匠人iOS 代码规范
iOS学习——UIPickerView的实现年月选择器
  最近项目上需要用到一个选择器,选择器中的内容只有年和月,而在iOS系统自带的日期选择器UIDatePicker中却只有四个选项如下,分别是时间(时分秒)、日期(年月日)、日期+时间(年月日时分)以及倒计时。其中并没有我们所需要的只显示年月的选择器,在网上找了很多相关的资料,但是觉得都写得过于麻烦。因此,为了满足项目需求,自己用UIPickerView写了一个只显示年月的选择器界面,同时还可以控制我们的显示的最小时间。当然,如果要控制其他内容也都是可以的,无非就是在数据处理上多一些处理和控制。 typed
mukekeheart
2018/03/26
4.7K0
iOS学习——UIPickerView的实现年月选择器
iOS开发之多表视图滑动切换示例(仿"头条"客户端)
  好长时间没为大家带来iOS开发干货的东西了,今天给大家分享一个头条新闻客户端各个类别进行切换的一个示例。在Demo中对所需的组件进行的简单封装,在封装的组件中使用的是纯代码的形式,如果想要在项目中进行使用,稍微进行修改即可。   废话少说,先介绍一下功能点,下图是整个Demo的功能点,最上面左边的TabBarButtonItem是用来减少条目的,比如下图有三个按钮,点击减号会减少一个条目。右边的为增加一个条目。点击相应的按钮是切换到对应的表视图上,下方红色的是滑动的指示器,同时支持手势滑动。运行具体效果
lizelu
2018/01/11
3.8K0
iOS开发之多表视图滑动切换示例(仿"头条"客户端)
iOS广告启动页
产品需求:启动页逻辑: 上部分为广告区域,可在运营后台配置图片+跳转页(同No.2);首次开 APP,则请求一次配置,失败或无配置则不显示,一旦有网了即刻请求一次并 做好缓存; 客户端每4小时请求一次;每两小时显示一次广告页内容 用户点击则跳转已配置页面;启动页上有5s倒计时,时间到了启动页关闭,也 可手动点击跳过启动页,广告已过期也不显示。 服务端返回模型: { “image” : “http://www.baidu.com“, “link” : “跳转链接”, “start” : “2017-0
czjwarrior
2018/05/28
8500
封装内嵌UICollectionView和UIPageControl的ScrollView
该文章介绍了一种封装内嵌UICollectionView和UIPageControl的ScrollView,可以用于实现相册滑动、页面跳转、长列表等效果。该方案使用UICollectionView封装了相册视图,使用UIPageControl实现了分页效果。在初始化时,先设置UICollectionView的数据源,再设置UICollectionView的属性,最后在实现UICollectionView的代理方法。该方案可以用于实现相册滑动、页面跳转、长列表等效果,并且易于使用。","summary_url":"http://www.open-open.com/lib/view/28955843476
MelonTeam
2018/01/04
1.7K0
封装内嵌UICollectionView和UIPageControl的ScrollView
iOS流布局UICollectionView系列五——圆环布局的实现
        前边的几篇博客,我们了解了UICollectionView的基本用法以及一些扩展,在不定高的瀑布流布局中,我们发现,可以通过设置具体的布局属性类UICollectionViewLayoutAttributes来设置设置每个item的具体位置,我们可以再扩展一下,如果位置我们可以自由控制,那个布局我们也可以更加灵活,就比如创建一个如下的circleLayout:
珲少
2018/08/16
1.5K0
iOS流布局UICollectionView系列五——圆环布局的实现
iOS 瀑布流实现「建议收藏」
我们将collectionview定义为一个属性变量,并在viewDidLoad中对其进行设置:首先我们创建了一个布局对象(layout),类型是我们自己定义的布局类(WaterfallFlowLayout),接着我们又对属性变量collectionview进行了创建,设置了他的frame。然后就是对其代理的设置,collectionview的代理有三个,除了和tableview相同的代理和数据源之外,还有一个布局的代理(UICollectionViewDelegateFlowLayout),这里只设置了两个代理,就是数据源和处理事件的代理。这里需要注意的是tableview的重用机制不需要注册,但是collectionview必须要注册,注册的类是自己定义的cell的类(WaterFallCollectionViewCell),然后再跟上标识。值得一提的是collectionview只能采用重用的方式来加载cell。
全栈程序员站长
2022/11/17
2.5K1
iOS 瀑布流实现「建议收藏」
iOS实现UICollectionViewDataSource与Controller的分离
之前每次用到UICollectionView的时候都会都需要在Controller里面去实现DataSource & Delegate方法
周希
2019/10/15
7870
Objective-C MapKit的使用-LBS简单的租车主界面demo效果分析代码demo地址
https://github.com/gongxiaokai/EasyCarDemo
gwk_iOS
2018/08/23
2K0
Objective-C MapKit的使用-LBS简单的租车主界面demo效果分析代码demo地址
iOS流水布局UICollectionView简单使用引实现结
开发中我们最常看到的可能是表视图UITableView了,但其实还有一个视图也很常见,特别是一些图片、商品、视频的展示界面,用UICollectionView来展现往往会更加方便。
Cloudox
2021/11/23
1.1K0
iOS流水布局UICollectionView简单使用引实现结
iOS开发之UICollectionViewDataSourcePrefetching
在iOS10中,苹果为UICollectionViewCell引入了Pre-Fetching预加载机制用于提升它的性能。主要引入了一个新的数据源协议UICollectionViewDataSourcePrefetching,包含两个方法: @protocol UICollectionViewDataSourcePrefetching <NSObject> @required // 预加载数据 - (void)collectionView:(UICollectionView *)collectionView
YungFan
2018/05/03
2.2K0
iOS开发之UICollectionViewDataSourcePrefetching
iOS本地动态验证码生成
@property (strong, nonatomic) NSArray *dataArray;//字符素材数组
conanma
2021/05/10
6560
iOS自定义的emoji表情键盘 原
        随着iOS系统版本的升级,对原生emoji表情的支持也越来越丰富。emoji表情是unicode码中为表情符号设计的一组编码,当然,还有独立于unicode的另一套编码SBUnicode,在OS系统中,这两种编码都有很好的支持。UI系统会自动帮我们将编码转义成表情符号,例如用SBUnicode如下代码:
珲少
2018/08/15
3K0
iOS自定义的emoji表情键盘
                                                                            原
iOS开发-RAC+MVVM练手项目 图床App写在前面准备工作界面设计首页历史关于后记
前段时间闲着无聊和盆友就搞了个图床站Chevereto-Free,忽然发现居然有API提供,而且很简单,只需要一个KEY就可以
gwk_iOS
2018/08/23
1K0
iOS开发-RAC+MVVM练手项目 图床App写在前面准备工作界面设计首页历史关于后记
关于Objective C编码规范,这些你一定要会
背景:这里有些关于编码风格Apple官方文档,如果有些东西没有提及,可以在以下文档来查找更多细节:
iOSSir
2019/06/14
4600
【IOS开发基础系列】UICollectionView专题
        UICollectionView是一种新的数据展示方式,简单来说可以把他理解成多列的UITableView(请一定注意这是UICollectionView的最最简单的形式)。
江中散人_Jun
2023/10/16
1.1K0
【IOS开发基础系列】UICollectionView专题
iOS_系统自带地图圆形区域选择范围
5.聚集操作:删除原理的大头针,在新经纬度添加大头针,并将地图移动到新的经纬度(反地理编码获得位置信息)
mikimo
2022/07/20
2.3K0
iOS_系统自带地图圆形区域选择范围
iOS·长按保存图片到相册:系统原生UIActionSheet与UIAlertView,UIAlertController等方案
场景: 在一个VC中,为一个UICollectionViewCell中的图片添加长按图片保存的事件。 长按保存图片 前提:infoPlist中添加相应权限:Privacy - Photo Libr
陈满iOS
2018/09/10
1.8K0
iOS·长按保存图片到相册:系统原生UIActionSheet与UIAlertView,UIAlertController等方案
推荐阅读
相关推荐
IOS基金会_ UICollectionView简单易用
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档