宏
- 有两种宏的类型,一种是类对象的宏,封装使用的数据对象,另一种是类函数的宏,封装函数的调用
const
- 作用
修饰右边基本变量或者指针变量
被const修饰的变量是只读类型
-(void)click{
int c = 5;
[self test:&c];
}
-(void)test:(int *)b{
int a = *b;
NSLog(@"%d",a);
}
const与宏的对比
名称 | 编译时刻 | 编译检查 | 优点 | 缺点 |
---|---|---|---|---|
宏 | 预编译 | 没有编译检查 | 可以定义方法 、函数 | 使用过多 会编译时间过长 |
const | 编译 | 有编译检查 |
- 练习
/*****修饰基本变量*******/
int const a = 3;
const int b = 5;
// 以上两种方式等价于(都可以的)
// a = 4; 报错
//Cannot assign to variable 'a' with const-qualified type 'const int'
// 不能将具有const限定类型的const int赋值给变量'a'。
// 修饰指针变量
/*****修饰指针*******/
int c = 5;
int d;
int const *p = &c;
c = 7;
//*p = 9; 报错 Read-only variable is not assignable
p = &d;
int * const p; // p:只读 *p:变量
int const * p1; // p1:变量 *p1:只读
const int * p2; // p2:变量 *p2:只读
const int * const p3; // p3:只读 *p3:只读
int const * const p4; // p4:只读 *p4:只读
static
-
修饰
局部变量
,被static修饰局部变量,延长生命周期,跟整个应用程序有关- 被static修饰局部变量,只会分配一份内存
- 被static修饰的局部变量,在程序一运行就会给static修饰的变量分配内存
-
修饰
全局变量
,被static修饰全局变量,作用域会修改,只能在当前文件夹下使用
-(void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
static int a = 0;//延长生命周期
a ++;
NSLog(@"%d",a);
}
extern
- extern:声明外部全局变量
- extern工作原理:先会去当前文件夹下查找有没有对应全局变量,如果没有,才会去其他文件查找
注意:extern只能用于声明,不能用于定义
#import "ViewController.h"
int i = 10;
#import "AppDelegate.h
extern int i;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"%d",i);
// Override point for customization after application launch.
return YES;
}
static和const
static修饰全局变量,修改作用域
static NSString * const unite = @"联合";
extern和const
.H
#import <UIKit/UIKit.h>
// 可写可不写 不写用 UIKIT_EXTERN
{
#ifdef __cplusplus
#define CWQKIT_EXTERN extern "C" __attribute__((visibility ("default")))
#else
#define CWQKIT_EXTERN extern __attribute__((visibility ("default")))
#endif
}
typedef enum {
CWQTopicTypeAll = 1,
CWQTopicTypePicture = 10,
CWQTopicTypeWord = 29,
CWQTopicTypeVoice = 31,
} CWQTopicType;
CWQKIT_EXTERN NSString * const CWQconstant;
/** 精华-顶部标题的高度 */
CWQKIT_EXTERN CGFloat const CWQTitilesViewH;
/** tabBar被选中的通知名字 */
CWQKIT_EXTERN NSString * const CWQTabBarDidSelectNotification;
.M
#import <UIKit/UIKit.h>
NSString * const CWQconstant = @"常量";
/** 精华-顶部标题的高度 */
CGFloat const CWQTitilesViewH = 35;
/** tabBar被选中的通知名字 */
NSString * const CWQTabBarDidSelectNotification = @"CWQTabBarDidSelectNotification";
网友评论