转载 IOS开发之---static变量

Objective-C
支持全局变量


主要有两种实现方式:

(1)第一种和C/C++中的一样, 使用"extern"关键词;

(2)另外一种就是使用单例实现。

(比如我们经常会把一个变量放在AppDelegate里面作为全局变量来访问, 其中AppDelegate就是一个单例类) 



在Objective-C中如何实现像C++中那样的静态成员变量呢?

你需要做的是在一个类A的implementation(.m或者.mm)文件中定义一个static变量,然后为A类定义静态成员函数(class
method,也就是类方法)来操作该变量。

这样在其它类中你就不需要创建A类的实例来对static变量进行访问。虽然该static变量并不是A类的静态成员变量,但是也算达到了同样的效果。static变量的作用域被限制在单一的文件中。代码可以如下所示:

[cpp] view plaincopy

  1. //example.h

  2. @interface Example : NSObject {
  3. }

  4. - (id)init;

  5. +(int)instanceCount;

  6. @end

[cpp] view plaincopy

  1. //example.m

  2. #import "example.h"

  3. static int count;

  4. @implementation Example

  5. -(id)init{

  6. self = [super init];

  7. if(nil!=self){

  8. count+=1;

  9. }

  10. return self;

  11. }

  12. +(int)instanceCount{

  13. return count;

  14. }

  15. @end




上面的例子中你就可以通过[Example instanceCount]对静态变量count进行访问,无须创建实例。

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

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

[cpp] view plaincopy

  1. #import <Foundation/Foundation.h>

  2. //警告

  3. //static int sCount ;

  4. @interface MyClass : NSObject

  5. //static int sCount;

  6. }

  7. +(void) addCount;

  8. @end


MyClass.m



     
 static关键字声明的变量必须放在implementation外面,或者方法中,如果不为它赋值默认为0,
它只在程序开机初始化一次。

+(void)addCount 因为标识了+号,所以这个方法无需使用这个类的对象调用。
直接使用类名方可调用这个方法。

#import "MyClass.h"
static int sCount  = 100;
@implementation
MyClass 
+(void)addCount   

   
 sCount ++;  
     NSLog(@"静态整型变量的值为:%d",
sCount);

@end

http://www.cocoachina.com/bbs/simple/?t60419.html

转载 IOS开发之---static变量,布布扣,bubuko.com

时间: 2024-10-24 21:41:26

转载 IOS开发之---static变量的相关文章

[转载]IOS开发之----strong和weak (IOS5新特性)

iOS5中加入了新知识,就是ARC,其实我并不是很喜欢它,因为习惯了自己管理内存.但是学习还是很有必要的. 在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都很熟悉了,在此我也不介绍,网上有很多相关文章. 现在我们看看iOS5中新的关键字strong, weak, unsafe_unretained. 可以与以前的关键字对应学习strong与retain类似,weak与unsafe_unretained功能差不多(有点区别,等下会介绍,这两个新关键字与a

[转载]ios 开发 icon图标设置

iTunes Artwork icon ───────────────────────── 512px (90px) App icon(iPhone4) ────────────────────────── 114px (20px) App icon(iPad) ───────────────────────────── 72px (12px) App icon(iPhone 3G/3GS) ───────────────────── 57px(10px) Spotlight/Settings

[转载]iOS开发之手势识别

感觉有必要把iOS开发中的手势识别做一个小小的总结.在上一篇iOS开发之自定义表情键盘(组件封装与自动布局)博客中用到了一个轻击手势,就是在轻击TextView时从表情键盘回到系统键盘,在TextView中的手是用storyboard添加的.下面会先给出如何用storyboard给相应的控件添加手势,然后在用纯代码的方式给我们的控件添加手势,手势的用法比较简单.和button的用法类似,也是目标动作回调,话不多说,切入今天的正题.总共有六种手势识别:轻击手势(TapGestureRecogniz

IOS开发—block对外部变量的内存管理

block对外部变量的内存管理 代码块在ios中通常用于回调,本文主要介绍block对外部变量的管理机制.我们知道如果要在block中使用block外面的变量,如果该变量是局部变量,就要先将其申明为__block类型.为什么呢?这就涉及到block对外部变量的内存管理. 一.基本数据类型 先看下面测试代码: //局部变量 - (void)localDataTest { int localData = 100; NSLog(@"localData --%p",&localData

iOS开发中Static和Const关键字的的作用

1.作用于变量: 用static声明局部变量时,则改变变量的存储方式(生命期),使变量成为静态的局部变量,即编译时就为变量分配内存,直到程序退出才释放存储单元.这样,使得该局部变量有记忆功能,可以记忆上次的数据,不过由于仍是局部变量,因而只能在代码块内部使用(作用域不变). 用static声明外部变量-------外部变量指在所有代码块{}之外定义的变量,它缺省为静态变量,编译时分配内存,程序结束时释放内存单元.同时 其作用域很广,整个文件都有效甚至别的文件也能引用它.为了限制某些外部变量的作用

[转载]IOS开发-正则表达式的使用方法

原文地址:http://www.cnblogs.com/GarveyCalvin/p/4250145.html?utm_source=tuicool&utm_medium=referral 前言:在表单验证中,我们经常会使用到正则,因为我们需要用它来判断用户输入的字符是否为合法的,如果是不合法的,那么应该提示用户输入错误,并不让提交至服务器.我们也可以通过正则表达式,从用户输入的字符串中过滤并获取我们想要的特定部分.总而言之,正则表达式是非常强大的. 方法一.谓词(NSPredicate)创建正

[转载]iOS 开发中为什么更新UI都要放在主线程中?

原因有2个: 1.在子线程中是不能进行UI 更新的,而可以更新的结果只是一个幻像:因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈,这中间的时间非常的短,就让大家误以为分线程可以更新UI.如果子线程一直在运行,则子线程中的UI更新的函数栈 主线程无法获知,即无法更新 2.只有极少数的UI能,因为开辟线程时会获取当前环境,如点击某个按钮,这个按钮响应的方法是开辟一个子线程,在子线程中对该按钮进行UI 更新是能及时的,如换标题,换背景图,但这没有任何意义 1.程序一开

转载-- IOS 开发,调用打电话,发短信,打开网址

1.调用 自带mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://[email protected]"]]; 2.调用 电话phone [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8008808888"]]; 3.调用 SMS [[UIApplication s

iOS开发中使用宏定义提高开发效率

iOS开发中使用宏定义提高开发效率 (2013-07-10 10:47:33) 转载▼ iOS开发中,巧妙的使用宏定义,可以提高开发效率,本篇简单介绍一下宏的定义,设置,应用,并在未来实践中不断追加一些常用的宏定义. 调试Log iPhone应用程序开发调试的时候,在代码中加入NSLog的暴力调试方法是很频繁的,但是在release的时候要删除这些调试代码,那工作量是烦躁,这样的情况下,试用宏就会显得非常的方便. 看下面的例子: #ifdef DEBUG #define LOG(...) NSL