Object-C之代码艺术

原创 2017年01月03日 16:38:53

代码的整体可读性:功能菜单

- (void)dealloc { /* ... */ }
- (instancetype)init { /* ... */ }

#pragma mark - View Lifecycle

- (void)viewDidLoad { /* ... */ }
- (void)viewWillAppear:(BOOL)animated { /* ... */ }
- (void)didReceiveMemoryWarning { /* ... */ }

#pragma mark - Custom Accessors

- (void)setCustomProperty:(id)value { /* ... */ }
- (id)customProperty { /* ... */ }

#pragma mark - IBActions

- (IBAction)submitData:(id)sender { /* ... */ }

#pragma mark - Public

- (void)publicMethod { /* ... */ }

#pragma mark - Private

- (void)zoc_privateMethod { /* ... */ }

#pragma mark - UITableViewDataSource

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { /* ... */ }

#pragma mark - ZOCSuperclass

// ... overridden methods from ZOCSuperclass

#pragma mark - NSObject

- (NSString *)description { /* ... */ }

条件语句


有条件的机构应始终使用,即使有条件的机构可以不带括号(例如,它只是一条线),以防止错误写括号。这些错误包括增加第二条生产线,并期待它成为if语句的一部分。另一个更危险的缺陷,可能会出现在那里行“里面的”if语句已被注释掉,并在下一行不知不觉成为if语句的一部分。

should be

if (!error) {
    return success;
}

Not

if (!error)
    return success;

// or
if (!error) return success;

should be

- (void)someMethod {
  if (![someOther boolValue]) {
      return;
  }

  //Do something important
}

Not

- (void)someMethod {
  if ([someOther boolValue]) {
    //Do something important
  }
}

Yoda conditions

should be

if ([myValue isEqual:@42]) { ...

Not

if ([@42 isEqual:myValue]) { ...

nil and BOOL judge

should be

if (someObject) { ...
if (![someObject boolValue]) { ...
if (!someObject) { ...

Not

if (someObject == YES) { ... // Wrong
if (myRawValue == YES) { ... // Never do this.
if ([someObject boolValue] == NO) { ...

Case Statements

switch (menuType) { // 枚举
    case CC_EnumNone:
        // ...
        break;
    case CC_EnumValue1:
        // ...
        break;
    case CC_EnumValue2:
        // ...
        break;
}

Enumerated Types

typedef NS_ENUM(NSUInteger, CC_MachineState) {
    CC_MachineStateNone,
    CC_MachineStateIdle,
    CC_MachineStateRunning,
    CC_MachineStatePaused
};

命名

  • Methods

should be

- (void)setExampleText:(NSString *)text image:(UIImage *)image;
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;
- (id)viewWithTag:(NSInteger)tag;
- (instancetype)initWithWidth:(CGFloat)width height:(CGFloat)height;

Not

- (void)setT:(NSString *)text i:(UIImage *)image;
- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;
- (id)taggedView:(NSInteger)tag;
- (instancetype)initWithWidth:(CGFloat)width andHeight:(CGFloat)height;
- (instancetype)initWith:(int)width and:(int)height;  // Never do this.
  • 代码解耦及加强可读性
    示例应用场景:假设有个Person类,需要喝水,根据职责划分,我们需要另外一个类Cup来完成喝水的动作,代码如下:
//Person.h
@interface Person:NSObject
- (void)drink;
@end

// Cup.h
@interface Cup:NSObject
- (id)provideWater;
@end

很明显Person和Cup间要完成喝水动作,一定会产生耦合,我们来看看OC中不同耦合方式下调用,代码的质量比较

方式一:.m引用

在.m文件导入Cup.h,同时生成临时的Cup对象来调用Cup中的方法。

#import "Person.h"
#import "Cup.h"

@implementation Person

- (void)drink {
    Cup *c = [Cup new];
    id water = [c provideWater];
    [self sip:water];
}

- (void)sip:(id)water 
{
  // sip water
}

@end

方式二: .h Property

避免方式一直接在.m中应用导致耦合不清晰,可以将耦合的部分声明放在.h中,提高代码可读性

// Person.h
@interface Person:NSObject
@property (nonatomic, strong) Cup *cup;
- (void)drink;

@end

// Person.m
@implementation Person
- (void)drink {
    self.cup = [Cup new];
    id water = [self.cup provideWater];
    [self sip:water];
}

- (void)sip:(id)water
{
  // sip water
}

@end
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Object-C 声明属性为什么用下划线,代码规范和编程风格

Object-C 声明属性为什么用下划线,代码规范和编程风格   在阅读和书写关于iPhone编程的代码的时候,发现有很多这样的情况: 看到很多源代码里面,使用前面带下划线变量,然后...

Object-c------计算代码行数小demo

计算代码行数

Object-C 声明属性为什么用下划线,代码规范和编程风格

Object-C 声明属性为什么用下划线,代码规范和编程风格   在阅读和书写关于iPhone编程的代码的时候,发现有很多这样的情况: 看到很多源代码里面,使用前面带下划线变量,然后在@sy...

《Effective Object-C 2.0 编写高质量IOS与OS X代码的52个有效方法》笔记

《Effective Object-C 2.0 编写高质量IOS与OS X代码的52个有效方法》1 、在类的头文件中尽量少引入其他头文件 使用@class代替import,还可以解决相互引用的问题。 ...

Object-c 一些代码规范

点引用是地道的Objective-C 2.0的风格。它被使用于简单的属性set、get操作,但对象的其它行为不应该使用它。 Setters中对NSString进行copy永远不要仅仅re...
  • joywxz
  • joywxz
  • 2011年10月13日 10:32
  • 395

Object-C代码规范

我们写出来的代码会给很多人看,为了使代码清晰简洁,方便阅读理解,都会统一遵从一定的代码规范,Objective-C同样如此。     主要参考规范:     1.Google Obje...

Object-c 代码规范

总结不全,高手多多指点

Object-C iOS纯代码布局 一堆代码可以放这里!

最近写的文章都是创业类,好吧,今天好好写写技术类的文章!毕竟这几天在速成IOS,看的是object-c,由于速成的很快,好累!好在现在基本已经入了点门道了,这才看的懂新人的代码,才能提前感受代码危机。...
  • cyq1162
  • cyq1162
  • 2017年05月12日 17:48
  • 560

Object-C快速生成单例的宏

  • 2015年12月09日 19:01
  • 1KB
  • 下载

Object-c程序设计(完整版)part2

  • 2016年01月21日 02:21
  • 19.3MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Object-C之代码艺术
举报原因:
原因补充:

(最多只允许输入30个字)