OC高效率52之多用类型常量,少用#define预处理指令

//
//  ViewController.m
//  OC高效率52之多用类型常量,少用#define预处理指令

/**
 *     1. 不要用预处理定义常量。这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找与替换操作。即时有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中得常量值不一致。
       2。在实现文件中使用static const 来定义“只在编译单元内可见的常量”。由于此类常量不在全局符号表中,所以无需为其名称加前缀。
       3.在头文件中使用extern来声明全局变量,并在相关实现文件中定义其值。这种常量要出现在全局符号列表中,所以其名称应加以区隔,通常用与之相关的类名做前缀。
 */

#import "ViewController.h"
#define ANIMATION_DURTION 0.3 //定义出的常量,没有类型信息

static const NSTimeInterval kAnimationDuration = 2.0;//知道常量类型有助编写开发文档
//变量一定要用static const 来声明,如果视图修改const所声明的变量,编译器会报错

@interface ViewController ()

@end
NSString *const EOCLoginManagerDidLoginNotificaton = @"EOCLoginManagerDidLoginNotificaton";

@implementation ViewController

-(void)animate
{
    [UIView animateWithDuration:kAnimationDuration animations:^{
        //Perform animations;
        UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 80, 80)];
        view.backgroundColor = [UIColor orangeColor];
        [self.view addSubview:view];
    } completion:^(BOOL finished) {
        
    }];

}
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self animate];
//    [self login];
    UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(150, 300, 100, 30)];
    btn.backgroundColor = [UIColor greenColor];
    [btn addTarget:self action:@selector(login) forControlEvents:UIControlEventTouchDragInside];
    [btn setTitle:@"点击通知" forState:UIControlStateNormal];
    [self.view addSubview:btn];
}

-(void)login
{
    [[NSNotificationCenter defaultCenter]postNotificationName:EOCLoginManagerDidLoginNotificaton object:nil];
    
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
时间: 2024-10-01 09:43:03

OC高效率52之多用类型常量,少用#define预处理指令的相关文章

Effective Objective-C 2.0 — 第四条:多用类型常量,少用#define预处理指令

第四条:多用类型常量,少用#define预处理指令 使用#define 预处理的坏处:定义出来的常量没有类型信息,编译器只是会在编译前据此执行查找与替换操作.即使有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中的常量值不一致. 使用例如:static const NSTimeInterval kAnimationDuration = 0.3; 在实现文件中使用 static const 来定义“只在编译单元内可见的常量”.由于此类常量不再全局符号表中,所以无须为其名称加前缀.

4、多用类型常量,少用#define预处理指令

摒弃: #define ANIMATION_DURATION 0.3 #define ERROR_MESSAGE @"ErrorMessage" 1)没有常量的类型信息 2)假设此指令声明在某个头文件中,那么所有引入了这个头文件的代码,都可以访问和修改ANIMATION_DURATION. 推荐: 1.私有常量 .m文件 static const NSTimeInterval kAnimationDuration = 0.3; static NSString *const kError

第4条:多用类型常量,少用#define预处理指令

定义常量的几种方式: 1.#define ANIMATION_DURAION 0.3         //定义了一个动画时长的常量, 预处理过程会把碰到的所有ANIMATION_DURAION一律替换成0.3 2.static const NSTimeInterval kAnimationDuration = 0.3;  //static 意味着该变量仅在定义此变量的编译单元中可见(也是.m文件).这种常量不出现在全局符号表中. 3. extern NSString *const StringC

OC高效率52:(二)类的头文件中尽量少引用其他头文件

// //  EOCPerson.h //  OC高效率52:类的头文件中尽量少引用其他头文件 // //  Created by Zoujie on 15/10/8. //  Copyright ? 2015年 Zoujie. All rights reserved. // #import <Foundation/Foundation.h> //#import "EOCEmployer.h" @class EOCEmployer;//向前申明该类,将引入头文件的时机尽量延

OC高效率52:(一)了解OC起源

// //  ViewController.m //  OC高效率52之了解OC起源 // //  Created by Zoujie on 15/10/8. //  Copyright ? 2015年 Zoujie. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad

typedef 类型重命名 和 #define 宏定义(1)

http://www.blogjava.net/jasmine214--love/archive/2010/11/29/339307.html 在现实生活中,信息的概念可能是长度,数量和面积等.在C语言中,信息被抽象为int.float和double等基本数据类型.从基本数据类型名称上, 不能够看出其所代表的物理属性,并且int.float和double为系统关键字,不可以修改.为了解决用户自定义数据类型名称的需求,C语言中引入类 型重定义语句typedef,可以为数据类型定义新的类型名称,从而

【C-数据类型 常量 变量】

一.基本数据类型 1) 整型 (int   %d) 2) 字符型 (char  %c) 3) 浮点型 %f ①. 单精度浮点型(float) ②. 双精度浮点型(double) 2.指针类型 void * 3.空类型   void 4.构造类型 1) 数组  a[] 2) 结构体 struct 3) 枚举   enum 4) 共用体 union 注意:C语言中没有布尔类型,表示真和假一般使用1和0表示. 二.常量 ①. 整型常量    如6,27,-299 ②. 浮点型常量  如5.43,-2.

黑马程序员---OC基础8【block类型】【Protocol】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [block类型] 1.block概念 block对象是一个C级别的语法和运行机制,不同之处,它除了有可执行代码以外,它还包含了与堆栈内存绑定的变量 方法的回调 block是一个类型,定义变量,用来存储代码块 2.block基本用法 block与函数很相似,有返回值类型,参数类型,主体: 返回值类型 (^block变量名)(形参列表) = ^(形参列表) { }; 没有参数可以写void,比如:i

O-C相关-10-动态类型检查

10-动态类型检查 1.动态绑定 1)OC 中方法的调用不由编译器决定,而由运行时决定 2)OC 中没有方法调用,只有消息接收. 一般称消息为选择器 2.动态类型检查 对象在运行时获得类型的能力称为内省,如果在代码中想知道对象是否具有指定方法,可以使用: 1)判断类型或父类类型 -(BOOL)isKindOfClass:(Class)Obj 判断一个对象是不是有某个类或其子类实例化出来的对象 2)仅判断类型 -(BOOL)isMemberOfClass:(Class)obj 判断对象是不是被某个