zoukankan      html  css  js  c++  java
  • iOS学习——Object-C模拟类变量

    iOS学习——Object-C模拟类变量

    Object-C中并没有JAVA中的类变量,博主在刚开始时,又是给@property加static修饰,又是给字段加static修饰,都会报错。查阅文档得到以下信息:

    1. static关键字不能用于修饰成员变量
    2. static关键字只能用于修饰局部变量全局变量函数
    3. static修饰局部变量,代表将该局部变量存放到静态存储区
    4. static修饰全局变量,可以限制该全局变量只能被当前源文件访问
    5. static修饰函数,可以限制该函数只能在当前源文件调用

    那么现在可以明白OC中的static修饰符跟不少语言中的static不是一回事。

    但事实上,类变量确实是面向对象中很有必要的。现在要用另一种方式模拟类变量。

    解决方案是:建立static的全局变量,并在实现public的get、set方法,供外部调用

    下面给出代码示例,相信你能很快明白其用法。

    //
    //  Person.h
    //  test_command
    //
    //  Created by 周凌宇 on 15/8/11.
    //  Copyright (c) 2015年 周凌宇. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    +(void) setPlanetName: (NSString *)planetName;
    +(NSString *) planetName;
    
    @end
    //
    //  Person.m
    //  test_command
    //
    //  Created by 周凌宇 on 15/8/11.
    //  Copyright (c) 2015年 周凌宇. All rights reserved.
    //
    
    #import "Person.h"
    
    
    static NSString *_planetName;
    
    @implementation Person
    
    +(void) setPlanetName: (NSString *)planetName {
        _planetName = planetName;
    }
    
    +(NSString *) planetName {
        return _planetName;
    }
    
    @end
    //
    //  main.m
    //  test_command
    //
    //  Created by 周凌宇 on 15/8/11.
    //  Copyright (c) 2015年 周凌宇. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            [Person setPlanetName:@"地球"];
            NSLog(@"%@",[Person planetName]);
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Java基础-集合框架的学习大纲
    Java多线程并发学习-进阶大纲
    Spring学习大纲
    Netty学习大纲
    分布式学习大纲
    数据库学习大纲
    缓存学习大纲
    JVM-jvm学习大纲(0)
    多线程学习-基础(十三)(学习参考·网摘) ArrayBlockingQueue源代碼解析(base jdk 1.8)
    C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法
  • 原文地址:https://www.cnblogs.com/coderfish/p/4875462.html
Copyright © 2011-2022 走看看