const,static,extern
4825 ワード
const,static,externの概要
一、constとマクロの違い(面接問題):
注意:多くのBlogはすべてマクロを使うと言って、多くのメモリを消耗することができて、私のこの検証は多くのメモリを生成することはできなくて、マクロは定数を定義して、定数はすべて定数区に置いて、1部のメモリだけを生成します.
二、const作用:制限タイプ
三、const開発で使用するシーン:
四、staticとexternは簡単に使う(一つのものを使うには、まずその役割を理解する) ローカル変数の修飾:1.ローカル変数のライフサイクルを延長し、プログラムが終了してから破棄されます.2.ローカル変数は1つのメモリしか生成されず、一度だけ初期化されます.3.ローカル変数の役割ドメインを変更します. グローバル変数を修飾する1.本ファイルでのみアクセス可能で、グローバル変数の役割ドメインを変更し、ライフサイクルは変更しない2.グローバル変数の繰り返し定義を避ける .
は、グローバル変数(グローバル静的変数を含む)の値を取得するためにのみ使用され、変数 を定義するために使用できません.
現在のファイルでグローバル変数があるかどうか、見つからないかを検索してから、他のファイルを検索します.
五、staticとconstを併用する staticとconstの役割:読み取り専用の静的変数 を宣言する開発使用シーン: を使用できます.
六、externとconstを併用する開発で使用されるシーン: 理由: staticとconstの組み合わせ:各ファイルに静的グローバル変数を定義する必要があります. externとconstの組み合わせ:グローバル変数を定義するだけで、複数のファイルが共有されます.
大域定数正規書き方:開発中はすべての大域変数を管理しやすく、通常GlobeConstファイルを作り、中には大域変数を専門に定義し、統一管理しなければならない.そうしないと、プロジェクトファイルは探しにくい. GlobeConst.h GlobeConst.m
一、constとマクロの違い(面接問題):
const
:以前よく使われていた文字列定数は、一般的にはマクロ抽出ですが、アップルはマクロ抽出をお勧めしません.const定数の使用をお勧めします.
:マクロはプリコンパイル(コンパイル前処理)、constはコンパイルフェーズである.
:マクロは検査をしないで、コンパイルエラーを報告しないで、ただ交換して、constはコンパイルチェックをして、コンパイルエラーを報告します.
:マクロはいくつかの関数、方法を定義することができます.constはできません.
:大量のマクロを使用すると、コンパイル時間が長くなりやすく、毎回再置き換えが必要になります.注意:多くのBlogはすべてマクロを使うと言って、多くのメモリを消耗することができて、私のこの検証は多くのメモリを生成することはできなくて、マクロは定数を定義して、定数はすべて定数区に置いて、1部のメモリだけを生成します.
// :
#define HMXAccount @"account"
#define HMXUserDefault [NSUserDefaults standardUserDefaults]
//
static NSString * const account = @"account";
- (void)viewDidLoad {
[super viewDidLoad];
//
//
[XMGUserDefault setValue:@"123" forKey:XMGAccount];
// const
[[NSUserDefaults standardUserDefaults] setValue:@"123" forKey:account];
}
二、const作用:制限タイプ
* 1.const ( p, *p)
* 2. const 。
const
- (void)viewDidLoad {
[super viewDidLoad];
//
int a = 1;
//
a = 20;
// const
// const: p
// ,const b
const int b = 20; // b:
int const b = 20; // b:
//
b = 1;
// const: *p, * , .
// int , a
int *p = &a;
int c = 10;
p = &c;
// p ,
// p
*p = 20;
// const , *p1,
//
const int *p1; // *p1: p1:
int const *p1; // *p1: p1:
// const p1
int * const p1; // *p1: p1:
// const *p1 const p1
//
const int * const p1; // *p1: p1:
int const * const p1; // *p1: p1:
}
三、const開発で使用するシーン:
* 1. 1: , , ,
* 2. 2: , , 。
@implementation ViewController
// const * , *a
// a, a
- (void)test:(const int * )a
{
// *a = 20;
}
// const * , a
// a , a
- (void)test1:(int * const)a
{
int b;
//
a = &b;
*a = 2;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
int a = 10;
// 1: , , , 。
// const, .
[self test:&a];
// 2: , , 。
[self test1:&a];
}
@end
四、staticとexternは簡単に使う(一つのものを使うには、まずその役割を理解する)
static
: extern
: extern
: // : , , extern 。
int a = 20;
// static
static int age = 20;
- (void)test
{
// static
static int age = 0;
age++;
NSLog(@"%d",age);
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self test];
[self test];
extern int age;
NSLog(@"%d",age);
}
I
五、staticとconstを併用する
でよく使用される文字列定数はstaticとconstを組み合わせた// static ,
// , 。
// , , 。
//
//
static const int a = 20;
// staic const :
// iOS staic const , , , .
// key , const key, key , 。
static NSString * const key = @"name";
// const *key1, *key1 ,key1 。
static NSString const *key1 = @"name";
六、externとconstを併用する
でよく使用される同じ文字列定数で、externとconstを組み合わせて使用できます.extern NSString * const nameKey = @"name";
NSString * const nameKey = @"name";