iOS

OC代码规范

命名

Preferred :
UIColor *myColor = [UIColor whiteColor];
Not Preferred :
UIColor *myColour = [UIColor whiteColor];

代码组织

使用#pragma mark - 将生命周期、分类方法和代理方法分块标注管理
#pragma mark - Lifecycle

- (instancetype)init {}
- (void)dealloc {}
- (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)privateMethod {}

#pragma mark - Protocol conformance
#pragma mark - UITextFieldDelegate
#pragma mark - UITableViewDataSource
#pragma mark - UITableViewDelegate

#pragma mark - NSCopying

- (id)copyWithZone:(NSZone *)zone {}

#pragma mark - NSObject

- (NSString *)description {}

#pragma mark -  lazy

空格

  • 使用2个空格不要使用Tab键
  • 方法和其他后的大括弧在第一行开始在新的一行结束。 Preferred:
if (user.isHappy) {
  //Do something
} else {
  //Do something else
}
Not Preferred:
if (user.isHappy)
{
    //Do something
}
else {
    //Do something else
}
  • 在方法中的参数中间添加一个空格方便阅读。
  • 优先使用自动生成,但是如果需要的话可以在实现文件中添加@ synthesize 和 @dynamic。
  • 调用方法时尽量避免方法中冒号对齐。当方法中包含3个以上的参数,使用冒号对齐会增加方法的可读性。但是,当方法中包含block时Xcode 的自动对齐会让代码看起来不容易分辨。 Preferred:
// blocks are easily readable
[UIView animateWithDuration:1.0 animations:^{
  // something
} completion:^(BOOL finished) {
  // something
}];
Not Preferred:
// colon-aligning makes the block indentation hard to read
[UIView animateWithDuration:1.0
                 animations:^{
                     // something
                 }
                 completion:^(BOOL finished) {
                     // something
                 }];
(更多…)

By iOS收藏家, ago
iOS

iOS项目代码混淆基本处理

1、首先准备两个文件: 方法列表文件func.list 和 混淆脚本文件confuse.sh (最后有代码)

先看一下文件的头文件方法列表 BasicViewController头文件方法列表.png func.list 中添加要混淆的方法名称 在此演示添加popNavigationController方法 func添加的方法.png

2、将两个文件都放入到工程中,如图:

添加文件.png

3、修改工程Build Phases配置运行脚本

工程配置.png

4、编译程序,可以看到混淆原来的方法名和混淆后的方法名,如图效果

编译log.png

5、然后用class-dump来看一下混淆前和混淆后的结果

混淆结果对比.png (更多…)

By iOS收藏家, ago
iOS

iOS宏定义和宏方法

宏定义和宏方法

定义机型

#define is_iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

#define is_iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

#define is_iPhone6P ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)

定义手机系统型号

#define kOSVersion [[UIDevice currentDevice].systemVersion floatValue]
#define kOS_iOS7 (OSVersion >= 7)
#define kOS_iOS8 (OSVersion >= 8)
#define kOS_iOS9 (OSVersion >= 9)

宏定义屏幕宽度和高度

#define KScreenSize    [UIScreen mainScreen].bounds.size   
#define KScreenHeight  ([[UIScreen mainScreen] bounds].size.height)
#define KScreenWidth   ([[UIScreen mainScreen] bounds].size.width)

定义打印的东西

#define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);

通过RGB获得一个颜色

static inline UIColor * getBackGoundColor(CGFloat r,CGFloat g,CGFloat b,CGFloat alpha){
    return [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:alpha];
}

验证手机号

static inline bool predicateIsMobilePhone(NSString * mobilePhone){
    NSString * validateContent = @"1[3|5|7|8|4|][0-9]{9}";
    NSPredicate *validateTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", validateContent];
    return [validateTest evaluateWithObject:mobilePhone];
}

比较大小和取绝对值

#define MIN(A,B)    ((A) < (B) ? (A) : (B))
#define MAX(A,B)    ((A) > (B) ? (A) : (B))
#define ABS(A)  ((A) < 0 ? (-(A)) : (A))
(更多…)

By iOS收藏家, ago