static的作用:常用来修饰变量。

全局变量被static修饰后,就称之为静态全局变量;局部变量被static修饰后,就称之为静态局部变量。统称为静态变量。

如果需要进一步解释下面的现象,可以了解iOS的内存管理方面的知识,比如局部变量是放置在栈区,而全局变量和静态变量是放置在静态区的。

一、static修饰局部变量

- (void)test {

    NSInteger i = ;
i++; static NSInteger m = ;
m++; NSLog(@"i = %ld, m = %ld", (long)i, (long)m); NSString *normalString; static NSString *staticString; NSLog(@"normal = %p, static = %p", &normalString, &staticString); }

将上述方法在调用三次的打印结果是:

i = , m = 

normal = 0x8e73d21, static = 0x928b78a89

i = , m = 

normal = 0x8e73b09, static = 0x928b78a89

i = , m = 

normal = 0x8e73c18, static = 0x928b78a89

总结:

当static关键字修饰局部变量时,只会对该变量初始化一次。

当static关键字修饰局部变量时,该变量在程序中只有一份内存。

当static关键字修饰局部变量时,该变量的作用域不会改变。

当static关键字修饰局部变量时,该变量的生命周期被延长,直到程序结束才销毁。

二、static修饰全局变量

#import "ClassA.h"

// 声明一个全局变量
NSInteger num; @implementation ClassA @end

在工程ClassA.m文件中证明一个全局变量,如果同时在其他.m文件中也声明一个全局变量NSIteger num,编译的时候就会报错。

在其他文件中如果想访问全局变量num,可以import "ClassA.h"然后就能访问,或者不import,使用extern 关键字也能获得全局变量,比如:

- (void)viewDidLoad {

    extern NSInteger num;
NSLog(@"num = %ld", (long)num);
}

如果不想被整个工程文件所访问到,但是能在所声明的文件中自由访问,就需要使用static关键字来声明,如下:

#import "ClassA.h"

// 声明一个静态文件的全局变量
static NSInteger num; @implementation ClassA @end

总结:当用static关键字修饰全局变量时,该变量的作用域仅限于当前文件,工程中的其他文件不可以访问到该全局变量。

static关键字的作用是什么?的更多相关文章

  1. C#: static关键字的作用(转)

    C#: static关键字的作用   static意思是静态,可以修饰类.字段.属性.方法 标记为static的就不用创建实例对象调用了,可以通过类名直接点出来 static三种用法: 1.用于变量前 ...

  2. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  3. 【转载】Static 关键字的作用

    原始日期:2016-07-16 17:53   一   普通的static关键字 1.  静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变 ...

  4. static 关键字的作用

    在C语言中,关键字static有三个明显的作用: 1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区). 2) 在模块内(但在函数体外),一个被声明为静态 ...

  5. 转:C#: static关键字的作用

    tatic意思是静态,可以修饰类.字段.属性.方法 标记为static的就不用创建实例对象调用了,可以通过类名直接点出来 static三种用法: 1.用于变量前,表示每次重新使用该变量所在方法.类或自 ...

  6. Static关键字的作用及使用

    1.使用static声明属性 如果希望一个属性被所有对象共同拥有,可以将其声明为static类型. 声明为static类型的属性或方法,此属性或方法也被称为类方法,可以由类名直接调用. class P ...

  7. C#学习笔记随笔(1)----C#中static关键字的作用

    静态分配的,有两种情况: 1. 用在类里的属性.方法前面,这样的静态属性与方法不需要创建实例就能访问, 通过类名或对象名都能访问它,静态属性.方法只有“一份”:即如果一个类新建有N个 对象,这N 个对 ...

  8. static关键字的作用(修饰类、方法、变量、静态块)

    1. static修饰的类只能为内部类,普通类无法用static关键字修饰.static修饰的内部类相当于一个普通的类,访问方式为(new 外部类名.内部类的方法() ).如下所示: public c ...

  9. C语言中static关键字的作用

    static的作用(精辟分析) 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加sta ...

随机推荐

  1. Django框架-路由层

    Django框架-路由层 一.URL配置(URLconf) 1.基本格式 from django.conf.urls import url urlpatterns = [ url(正则表达式, vie ...

  2. mybatis--一对多关联

    今天来介绍mybatis的一对多关联 (1)首先创建数据库mybatisonetomany,并创建数据库表post和user,并向其中插入一定的数据: create database mybatiso ...

  3. Codeforces Round #618 (Div. 1)C(贪心)

    把所有数看作N块,后面的块比前面的块小的话就合并,这个过程可能会有很多次,因为后面合并后会把前面的块均摊地更小,可能会影响更前面地块,像是多米诺骨牌效应,从后向前推 #define HAVE_STRU ...

  4. Linux下tail命令的使用方法

    Linux下tail命令的使用方法: linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,ta ...

  5. 精简版logging

    # coding=utf-8 import logging import time import os import logging.handlers import re def logger(sch ...

  6. 中国大学MOOC 邮箱验证的问题

    在使用 中国大学 MOOC 过程中,在PC端修改个人资料时,其中有项“常用邮箱”,于是写了QQ邮箱,结果发现一直无法验证,连邮件都无法收到. 经过多番尝试,重新使用邮箱注册的方式注册账号,然后注册成功 ...

  7. CentOS6.5_x64安装MySQL-5.6.17,在已经启动MySQL服务的情况下,出现密码报错ERROR 2002 (HY000)

    1.修改MySQL配置文件,使MySQL登陆时跳过密码验证 skip-grant-tables 2.重启MySQL服务 service mysql restart 3.进入MySQL,修改user表中 ...

  8. 数据库持久化框架——MyBatis(1)

    叨叨时刻:内容根据阿里云大学的MyBatis视频教程整理而成,有需要最好跟着视频教程走一遍 MyBatis 是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 ...

  9. js加密(七)steam登录

    1. url: https://store.steampowered.com/login/?redir=&redir_ssl=1 2. target: 登录 3. 分析 3.1 老样子,抓包, ...

  10. 萌新深度学习与Pytorch入门记录(一):Win10下环境安装

    深度学习从入门到入土,安装软件及配置环境踩了不少坑,过程中参考了多处博主给的解决方法,遂整合一下自己的采坑记录. (若遇到不一样的错误,请参考其他博主答案解决) 笔者电脑系统为win10系统,在此环境 ...