黑马程序员——OC语言基础---Static关键字使用
2015-10-06 17:12
357 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Static关键字使用
1、关于OC中的Static关键字使用
被static修饰的全局变量或者局部变量,都会放在内存的静态区。最后由系统释放。
在OC中static关键字使用误区
使用static修饰实例变量是不被允许的
使用static修饰了方法,也是错误的
2、在OC中static可以怎么用?
1、在.h头文件中,可以定义全局静态变量,存在于内存的静态区,仅限于当前类使用。但不能用类名访问(区别于Java);它的声明必须要放在@interface外面;如下:
<span style="font-size:14px;">static int num = 1;//在头文件中只有这一种使用方式,并且必须加static关键字;
@interface Dog: NSObject
{
//实例变量不能声明为静态
// static int _speed;//编译不通过
}
//static int num = 1;//定义在这里,编译不通过
-(void)dogTest;
@end
#import "Dog.h"
@implementation Dog
-(void)dogTest{
num = 100;
NSLog(@"dogTestnum = %d,num的地址 = %p",num,&num);
}
@end</span>
其他的类可以将这个头文件导入,也可以访问这个num,只不过是将这个num的静态变量为当前这个类完全复制了一份;
比如:
<span style="font-size:14px;">#import <Foundation/Foundation.h>
#import "Dog.h"//导入dog的类
@interface Person : NSObject
-(void)personTest;
@end
#import "Person.h"
@implementation Person
-(void)personTest
{
NSLog(@"personTest num=%d,num的地址=%p",num,&num);
}
@end<span style="font-family: SimSun; background-color: rgb(255, 255, 255);"> </span></span>
然后我们可以在main函数中将这两个值和地址打印出来:
int main(int argc, const char *argv[])
{
@autoreleasepool {
[[Dog new] dogTest];
Person *per = [Person new];
[per personTest];
}
return 0;
}
通过打印结果我们发现:地址不一样,值也不一样;说明他们是两份完全不一样的变量。
2、在.m实现文件中,可以定义全局变量,它存在于全局静态区中,不可以被其他类操作访问,仅局限与当前类;可以声明在@implementation外面,也可以声明在里面,都一样;
并且这样声明,如下:
<span style="font-size:14px;">//static int num = 10;//也可以声明在这里
@implementation Dog
//静态的全局变量
//只能当前文件中使用
static int num= 10;
-(void)run{
//静态局部变量
// static int num = 10;
//
num+=1;
NSLog(@"num = %d",num);
// num++;
}<span style="font-family: SimSun; background-color: rgb(255, 255, 255);"> </span></span>
声明全局变量,不管声明在.h中,还是声明在.m中,它随类的加载而加载,只会初始化一次。
因为类只会被加载一次。会有默认初始值。
3,可以定义局部变量和C语言一样,延长变量生命周期 ,加了static关键字的局部变量,存在于全局作用域中。随着程序的运行,这个局部变量只会被初始化一次;
<span style="font-size:14px;">#import "Dog.h"
#pragma mark 狗类的实现
@implementation Dog
-(void)run{
//定义局部静态变量 m
static int m=10;
NSLog(@"m= %d",m); m++;
}
@end</span><span style="font-size:12px;"> </span><span style="font-size:12px; font-family: SimSun; background-color: rgb(255, 255, 255);"> </span>
注意:
在点m文件中,Static型全局变量的可见性,局限于当前.m文件其他的文件中的类,无法访问到该变量
Static关键字使用
1、关于OC中的Static关键字使用
被static修饰的全局变量或者局部变量,都会放在内存的静态区。最后由系统释放。
在OC中static关键字使用误区
使用static修饰实例变量是不被允许的
使用static修饰了方法,也是错误的
2、在OC中static可以怎么用?
1、在.h头文件中,可以定义全局静态变量,存在于内存的静态区,仅限于当前类使用。但不能用类名访问(区别于Java);它的声明必须要放在@interface外面;如下:
<span style="font-size:14px;">static int num = 1;//在头文件中只有这一种使用方式,并且必须加static关键字;
@interface Dog: NSObject
{
//实例变量不能声明为静态
// static int _speed;//编译不通过
}
//static int num = 1;//定义在这里,编译不通过
-(void)dogTest;
@end
#import "Dog.h"
@implementation Dog
-(void)dogTest{
num = 100;
NSLog(@"dogTestnum = %d,num的地址 = %p",num,&num);
}
@end</span>
其他的类可以将这个头文件导入,也可以访问这个num,只不过是将这个num的静态变量为当前这个类完全复制了一份;
比如:
<span style="font-size:14px;">#import <Foundation/Foundation.h>
#import "Dog.h"//导入dog的类
@interface Person : NSObject
-(void)personTest;
@end
#import "Person.h"
@implementation Person
-(void)personTest
{
NSLog(@"personTest num=%d,num的地址=%p",num,&num);
}
@end<span style="font-family: SimSun; background-color: rgb(255, 255, 255);"> </span></span>
然后我们可以在main函数中将这两个值和地址打印出来:
int main(int argc, const char *argv[])
{
@autoreleasepool {
[[Dog new] dogTest];
Person *per = [Person new];
[per personTest];
}
return 0;
}
通过打印结果我们发现:地址不一样,值也不一样;说明他们是两份完全不一样的变量。
2、在.m实现文件中,可以定义全局变量,它存在于全局静态区中,不可以被其他类操作访问,仅局限与当前类;可以声明在@implementation外面,也可以声明在里面,都一样;
并且这样声明,如下:
<span style="font-size:14px;">//static int num = 10;//也可以声明在这里
@implementation Dog
//静态的全局变量
//只能当前文件中使用
static int num= 10;
-(void)run{
//静态局部变量
// static int num = 10;
//
num+=1;
NSLog(@"num = %d",num);
// num++;
}<span style="font-family: SimSun; background-color: rgb(255, 255, 255);"> </span></span>
声明全局变量,不管声明在.h中,还是声明在.m中,它随类的加载而加载,只会初始化一次。
因为类只会被加载一次。会有默认初始值。
3,可以定义局部变量和C语言一样,延长变量生命周期 ,加了static关键字的局部变量,存在于全局作用域中。随着程序的运行,这个局部变量只会被初始化一次;
<span style="font-size:14px;">#import "Dog.h"
#pragma mark 狗类的实现
@implementation Dog
-(void)run{
//定义局部静态变量 m
static int m=10;
NSLog(@"m= %d",m); m++;
}
@end</span><span style="font-size:12px;"> </span><span style="font-size:12px; font-family: SimSun; background-color: rgb(255, 255, 255);"> </span>
注意:
在点m文件中,Static型全局变量的可见性,局限于当前.m文件其他的文件中的类,无法访问到该变量
相关文章推荐
- 从汇编看c++中函数里面的static关键字的使用说明
- C++的static关键字及变量存储位置总结
- PHP中new static() 和 new self() 的区别介绍
- C#静态static的用法实例分析
- static关键字的作用详解
- 浅谈C/C++中的static与extern关键字的使用详解
- C语言基础知识点解析(extern,static,typedef,const)
- c# static 静态数据成员
- 浅析php变量修饰符static的使用
- php面向对象全攻略 (十) final static const关键字的使用
- c语言中static的用法详细示例分析
- static全局变量与普通的全局变量的区别详细解析
- Objective-C的内省(Introspection)用法小结
- 深入理解C语言 static、extern与指针函数
- 关于C++中的static关键字的总结
- C#类中static变量用法分析
- C/C++中static,const,inline三种关键字详细总结
- php面向对象中static静态属性与方法的内存位置分析
- C++类中的static和const用法实例教程
- php面向对象中static静态属性和静态方法的调用