Objective-C语法之static关键字的那些事儿
       学习过Java 或者 C 语言的朋友应该很清楚static关键字吧?在某个类中声明一个static 静态变量, 其他类中想使用它或者修改它不用new 这个对象 ,直接使用它的类名方可直接拿到这个静态变量的对象,遍可以在其他类中任意修改这个变量的数值。
        
        在Objective-C 的语法中声明后的static静态变量在其他类中是不能通过类名直接访问的,它的作用域只能是在声明的这个.m文件中 。不过可以调用这个类的方法间接的修改这个静态变量的值。MOMO通过一个例子详细的解析一下static关键字的使用。


类的创建方法就不多说了,之前的文章有写过。

MyClass.h
警告:  static 写在interface外面编译是没有错误的,但是编译器会报警告,这么说这样的写法是不被编辑器认可的。
错误:static 写在interface里面会直接报错,显然这样的语法是不被认可的。

+(void) addCount;  各位盆友们注意一下这法方法前面的+号。 它的意思是标致这个方法为静态方法,标志+号后不用创建这个对象通过类名可以直接调用这个静态方法。 而之前方法前用过的-号,标志-号后的方法必须通过本类的对象或者在本来中才可以使用。

#import <Foundation/Foundation.h> //警告 //static int sCount ; @interface MyClass : NSObject { //错误的写法 //static int sCount; } +(void) addCount; @end
MyClass.m

       static关键字声明的变量必须放在implementation外面,或者方法中,如果不为它赋值默认为0,它只在程序开机初始化一次。
+(void)addCount 因为标识了+号,所以这个方法无需使用这个类的对象调用。直接使用类名方可调用这个方法。
#import "MyClass.h" static int sCount = 100; @implementation MyClass +(void)addCount { sCount ++; NSLog(@"静态整型变量的值为:%d", sCount); } @end

main.m

无需alloc这个对象,直接使用MyClass类名方可直接调用addCount方法。

#import <UIKit/UIKit.h> #import "MyClass.h" int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //添加我们的测试代码 [MyClass addCount]; int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; }

运行这个程序,初始化赋值为100 ,调用方法的时候++,所以打印出来的数值为101。

MyClass.m

将static整型变量定义在方法中,并且为其赋值100。
#import "MyClass.h" @implementation MyClass +(void)addCount { static int sCount = 100; sCount ++; NSLog(@"静态整型变量的值为:%d", sCount); } @end
main.m

循环5次调用这个方法,看看结果是什么样字,结果肯定是101吧。。

#import <UIKit/UIKit.h> #import "MyClass.h" int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //添加我们的测试代码 for (int i =0; i < 5; i++) { [MyClass addCount]; } int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; }


程序员不要相信任何人说的任何有关程序的话,一定相信自己,相信自己眼睛看到的一切,哇咔咔~~

可见即使将static静态变量写在方法中,它的初始化也是在程序开机时,程序一旦启动以后static是不能在创建的。所以程序在这里调用了5次这个方法,sCount的值并没有因为重新创建static sCount而改变,而是将sCount的值一直存在内存中。


static关键字在任何语言中都是非常重要的,它有优点也有缺点,善用static 关键字是一个不错地选择哦,哇咔咔~ 

前几天上不了网 悲剧啊~~ 今天去按摩店 针灸 拔火罐 按摩 刮痧  太爽了,MOMO向广大盆友们问好,有什么都没有有一个好身体重要,多去健身 保健 锻炼身体 搞IT的盆友们  你们懂得 嘿嘿。。 


转载于:https://www.cnblogs.com/xuanyusong/archive/2011/09/24/2238557.html

Objective-C语法之static关键字的那些事儿(六)相关推荐

  1. 【零基础学Java】—static关键字概述(十六)

    [零基础学Java]-static关键字概述(十六) 一.static关键字 二.static关键字修饰成员变量 /*** @author :CaiCai* @date : 2022/4/8 11:1 ...

  2. Java 静态变量,静态方法,静态常量(java static 关键字)

    Java 静态变量,静态方法,静态常量  就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...

  3. Java中的static关键字的用法

    1.静态方法 static:通常在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: (1)它们仅能调用其他的static方法. (2 ...

  4. 面试季,Java中的static关键字解析

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面 ...

  5. Java中的static关键字解析 转载

    原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到 ...

  6. Java:封装的概念,UML类图,构造方法,this关键字,static关键字,方法重载,包package

                     oop三大特性:封装,继承,多态 oop一般指面向对象程序设计(一种计算机编程架构) 一.封装的概念:    将东西包在一起,然后以新的完整形式呈现出来       ...

  7. Java中static关键字总结

    原文地址:http://blog.sina.com.cn/s/blog_61889f5c010105tr.html 1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象 ...

  8. [转] Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  9. 【Java学习笔记之十五】Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

最新文章

  1. 工业互联网不只是网络:网络是基础,平台是关键
  2. Loj#6434「PKUSC2018」主斗地(搜索)
  3. java crud事件回调_java回调机制 - 神是到着念的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. emmc linux 识别分区_linux下给U盘分区并制作文件系统
  5. [bzoj1791][ioi2008]Island 岛屿(基环树、树的直径)
  6. Python+数据分析+机器学习,数据科学家最少必要知识库!
  7. 在这个人人拥抱python的时代,R真的out了吗?
  8. django mysql secure_auth_MySQL8.0的用户密码加密方式Django2.1兼容。
  9. php xml三级联动,jquery+xml实现三级联动步骤详解
  10. 【C++】运行MSDEV.EXE错误0xc0000142
  11. ue4 怎么传递变量到另一个蓝图_UE4中用Niagara实现procedural浪花
  12. 阿里云短信发送工具类 AliyunSmsUtil.java
  13. NJM4556AM集成电路是高增益、大输出电流双路运算放大器
  14. CAJViwer安装提示:请求的操作需要提升
  15. 2022年11月(下半年)信息系统项目管理师考试-案例分析真题及解析
  16. python股票相关性分析_python处理时间序列数据股票数据,并进行相关性分析
  17. 数据结构实验(C++实现):二叉树操作
  18. 方方格子access_工具|史上最全Excel插件集合及相关安装包!
  19. base64与图片文件之间的互转
  20. Python对离散变量处理:哑变量编码和one-hot编码

热门文章

  1. 对datatable进行linq过滤
  2. linux 查看各目录(文件夹)下文件大小
  3. RadioWar_RFID_LiveCD_Alpha330
  4. Shiro和SpringBoot简单集成
  5. 从闭包函数的变量自增的角度 - 解析js垃圾回收机制
  6. js img图片加载失败,重新加载+断网检查
  7. 计算图片的宽和高 动态设置图片的位置
  8. JScript 和 VBscript访问网络上的打印设备
  9. 自己的数字选择控件NumberPicker
  10. 60个我们应该看到的简单和创意的广告