Objective-C 语法之 static 关键字
转:http://www.apkbus.com/android-593-1.html
学习过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 因为标识了+号,所以这个方法无需使用这个类的对象调用。直接使用类名方可调用这个方法。
[代码]java代码:
#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 关键字是一个不错地选择哦,哇咔咔~
Objective-C 语法之 static 关键字的更多相关文章
- Java基础语法 - 面向对象 - static 关键字
使用static关键字修饰的变量.常量和方法分别被称作静态变量.静态常量和静态方法,也被称作类的静态成员 静态变量 使用static修饰过的类变量称为静态变量 该变量需要使用类名.变量名进行调用,不能 ...
- Java语法基础-static关键字
static关键字说明 “static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法.这 ...
- 基础的语法知识(static关键字)
1.C++中的局部变量.全局变量.局部静态变量.全局静态变量的区别 局部变量(Local variables)与 全局变量: 在子程序或代码块中定义的变量称为局部变量,在程序的一开始定义的变量称为全局 ...
- java基础语法——方法,static关键字
一:方法: 1.什么是方法: 通俗地讲,方法就是行为.它是完成特定功能的代码块能执行一个功能.它包含于类和对象中. 2.为什么要有方法: *提高代码的复用性. *提高效率 *利于程序维护 3.命名规则 ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- (转)Java中的static关键字解析
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
- Java中的static关键字解析 转载
原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到 ...
- 关于java的static关键字
通常来说,当你创建类时,就是在描述那个类的对象的外观与行为.除非你用new创建那个类的对象,否则,你实际上并未获得任何东西.当你用new来创建对象时,数据存储空间才被分配,其方法才供外界调用. 但是有 ...
随机推荐
- poj 3264 Balanced Lineup (RMQ)
/******************************************************* 题目: Balanced Lineup(poj 3264) 链接: http://po ...
- SQL Server 扩展一个支持类似。net 时间格式化的标量函数~
* FROM sys.objects WHERE name=N'uF_DateFormat' AND [type]='FN') DROP FUNCTION uF_DateFormat GO SET A ...
- co + Generator 写的迭代器 类似 async.whilst
试着用用Koa,项目里原来有用到async 的whilst 用koa再用async感觉不太舒服,就用Generator+co写了个类似async whist的调用的主体功能,像传参这些没有作到 var ...
- mfc中Button、Edit Control和MFC EditBrowse Control的用法
[前(fei)言(hua)] 写LL(1)分析器被CString转string卡了一个多小时也是醉了. 趁着还算清醒写下这次用到的控件的使用方法好了. 这次实验的mfc用到了四个控件:Edit Con ...
- 第一章 git指令与设置
相关指令: 1.从远程的master分支上创建新的分支,此时新分支内容与master分支内容相同: git checkout master; git branch newbranch; git che ...
- 【笔记】Python 学习Tips
Lambda Python中给予的定义是用来创建匿名的简单函数(单行).基本的应用场景就是替换简单函数的定义. >>> fl = lambda x : x % 3 >>& ...
- [转]linux14.04下caffe的安装步骤
linux14.04下caffe的安装步骤 原文地址:http://blog.csdn.net/xiaoyang19910623/article/details/52997481?locatio ...
- Ext开场布局设计Viewport
//加载dwr dwr.engine.setAsync(false); //***************************************框架定义部分***************** ...
- View的事件处理流程
一直对view的事件处理流程迷迷糊糊,今天花了点时间写了个栗子把它弄明白了. 1.view的常用的事件分为:单击事件(onClick).长按事件(onLongClick).触摸事件(onTouch), ...
- jquery实现TODOList
html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...