有关里面包车型大巴表就看自个儿的习于旧贯了,宏定义只是简短的文书替换

近年来在写移动监察SDK,开掘除去技艺达成还有不少细节须求专注的,那里做下总括分享。

命名标准

看来, iOS命名两大口径是:可读性高和防护命名抵触(通过加前缀来保障).
Objective-C 的命名平日都相比长, 名称遵循驼峰式命名法

坑1:项目上马前早晚要取个前缀,缩短争持的或是

常量

对于常量命名最棒在头里加上字母k作为标志,比如:

static const NSTimeInterval kAnimationDuration = 0.3;

Tips:

#澳门金冠网站主页,define 宏定义

static 静态

const 常量

区别

宏:
宏定义只是简单的文本替换,未有此外类型音信。宏就是把源代码中用到那几个宏的地点进行1个简便的文件替换。

常量:

四种写法:
static const NSString *DDString = @"女神大人,么么哒";
const NSString *DDString = @"女神大人,么么哒";
NSString const *DDString = @"女神大人,么么哒";
NSString * const DDString = @"女神大人,么么哒";

这两种有哪些区别吗,轻便点说正是 const 左侧的东西 不可能改改。

例如:

//这个表示 *DDString 这个指针不能修改
NSString const *DDString = @"女神大人,么么哒";
//这个表示 DDString 这个字符串内容不能修改,所以应该采用这种
NSString * const DDString = @"女神大人,么么哒";

只要加上Static
正是不得不在本类里面访问。假若未有加,还是能够通过extern来访问。

亟需加前缀的地点有怎样吗?

enum的书写

即使如下书写enum.

typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
    UIViewAnimationTransitionNone,
    UIViewAnimationTransitionFlipFromLeft,
    UIViewAnimationTransitionFlipFromRight,
    UIViewAnimationTransitionCurlUp,
    UIViewAnimationTransitionCurlDown,
};

这边需求留意的是:
枚举类型命名要加相关类名前缀并且枚举值命名要加枚举类型前缀.

1。NSUserDefaults里面包车型客车具有字段,即使不加很轻便和app开垦者起的名字同样,那样就会互相覆盖,至于用何人的就看何人后写入了。

变量和目的的命名

给一个目的命名一般服从: 修饰 + 类型。

例如

titleLabel
confirmButton
XXXArray
XXXDictionary

二.数据库命名,这些就毫无多说了,同样的题材。至于里面包车型客车表就看自个儿的习于旧贯了,加不加前缀都ok

编制程序规范

为了保障编制程序的dry,要硬着头皮把重复部分封装起来。

上边推荐的1对小细节的编制程序规范吧。

  1. 判断nil或者YES/NO

Preferred:
    if (someObject) { ... } 
    if (!someObject) { ... }

Not preferred:
    if (someObject == YES) { ...} 
    if (someObject != nil) { ...}

if (someObject == YES)轻巧误写成赋值语句, 本人给自个儿挖坑了…而且if
(someObject)写法很简短, 何乐不为呢?

  1. 标准化赋值

Preferred:
    result = object ? : [self createObject];

Not preferred:
    result = object ? object : [self createObject];
  1. 伊始化方法

Perferred:
    NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve"];
    NSDictionary *productManagers = @{@"iPhone" : @"Kate", @"iPad" : @"Kamal"};
    NSNumber *shouldUseLiterals = @YES;
    NSNumber *buildingZIPCode = @10018;

开头化多用字面量方法一贯是倡导的行事。

  1. BOOL 赋值

Preferred:
    BOOL isAdult = age > 18;

Not preferred:
    BOOL isAdult;
    if (age > 18)
    {
        isAdult = YES;
    }
    else
    {
        isAdult = NO;
    }
  1. 拒绝死值

Preferred:
    if (car == Car.Nissan)

    const int adultAge = 18;
    if (age > adultAge) { ... }

Not preferred:
    if (carName == "Nissan")

    if (age > 18) { ... }
  1. weakSelf 幸免循环引用

__weak typeof(self) weakSelf = self;
dispatch_block_t block =  ^{
    [weakSelf doSomething]; // weakSelf != nil
    // preemption, weakSelf turned nil
    [weakSelf doSomethingElse]; // weakSelf == nil
};

三.类名 这些编制程序习贯上最好依旧增加,不加就算难点相当的小。

参考

http://www.cocoachina.com/ios/20151014/13678.html
那篇持续更新,逐步储存…….

四.财富名
 按习于旧贯觉的照旧加个前缀,具体会不会有标题自身也还没用到,等选择了再来补充

5.static 定义的静态方法、静态变量、枚举
那些必须求加上前缀,不管是杰出的编制程序习贯依然收缩争辩都急需的 

6.#define 预编写翻译名那么些也是必须抬高前缀
 要不app开拓者假如也定义3个和你同一的预编写翻译名也是最终运转就用哪个人的咯

坑2 :第二方组件的使用

像互联网请求、数据库这一个基本很常用,大部分静态库都会用到,本身包裹的话时间上又不容许,中期能够先用第二方的如:AFNetworking、FMDB
提取下常用的类也没多少个完全能够一贯用。于是作者就相当的慢意的导入进去,哎。。不错呀。。。能够欣欣自得的写逻辑咯。不过等费用完集成到项目就会发觉有标题,三个主题素材,一群警告。起始认为是文本名不可能同样,于是初步改文件名类名。都改好了开采依旧这二个。然后干脆直接沟通前缀
如“AF”
“FM”全体轮换掉,果然ok了。其实她们最大的难点不是类名,是C语言的static关键字定义的静态方法、静态变量和枚举。可想而知替换掉前缀,把她们盗版过来就足以笑容可掬的使用了。

相关文章