10

Objective-C研究院之static关键字(六)

 3 years ago
source link: https://www.xuanyusong.com/archives/408
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
首页 > IOS频道 > 【Objective-C研究院之语法】 > Objective-C研究院之static关键字(六)

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;
MyClass.m
       static关键字声明的变量必须放在implementation外面,或者方法中,如果不为它赋值默认为0,它只在程序开机初始化一次。
+(void)addCount 因为标识了+号,所以这个方法无需使用这个类的对象调用。直接使用类名方可调用这个方法。
#import "MyClass.h"
static int sCount  = 100;
@implementation MyClass
+(void)addCount
    sCount ++;
    NSLog(@"静态整型变量的值为:%d", sCount);
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);
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的盆友们  你们懂得 嘿嘿。。 
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Objective-C研究院之static关键字(六)》有 2 条评论

  1. f3b28965f2db3b02412f3254fdd8002a?s=80斗战胜魔 说:

    第一段中“Java或C…,new一个对象或用类名取这个对象”,C语言没有对象,不能通过类名取到这个对象?!

留下一个回复 取消回复

你的email不会被公开。

评论

姓名 *

电子邮件 *

站点


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK