iOS关键字static extern const使用示例详解

 更新时间:2023年11月09日 11:02:53   作者:FieryDragon  
这篇文章主要为大家介绍了iOS关键字static extern const使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

全局变量

在函数外声明的变量,可以在声明时附上初始值,存储在全局区,生命周期为整个程序运行期间。

#import "SEObject.h"
//定义在.h文件中时该类被其他文件引入时报重复定义的错误(1 duplicate symbol for architecture x86_64)
NSString * SEString = @"SEString";
@implementation SEObject
@end
#import "SEView.h"
//#import "SEObject.h"
//NSString * SEString;
@implementation SEView
@end

源程序中不能存在相同的对象名,否则编译器报错(1 duplicate symbol for architecture x86_64

extern

此时如果其它源文件想要访问该全局变量,需要声明extern

  • 在使用的类中extern 全局变量,此时不要要引入全局变量所在类。
#import "SEView.h"
//#import "SEObject.h"
//NSString * SEString;
@implementation SEView
- (void)add {
    extern NSString * SEString;
    NSLog(@"%@",SEString);
    SEString = @"SEString2";
    NSLog(@"%@",SEString);
}
@end
  • 在全局变量所在类的.h文件中声明该全局变量外部使用(推荐)。
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
extern NSString * SEString;
@interface SEObject : NSObject
@end
NS_ASSUME_NONNULL_END
#import "SEView.h"
#import "SEObject.h"
//NSString * SEString;
@implementation SEView
- (void)add {
    //extern NSString * SEString;
    NSLog(@"%@",SEString);
    SEString = @"SEString2";
    NSLog(@"%@",SEString);
}
@end
SEString
SEString2

static - 静态全局变量

用static修饰的全局变量为静态全局变量,存储在全局区,生命周期为整个程序运行期间。

#import "SEObject.h"
//定义在.h文件中时该类被其他文件引入时报重复定义的错误(1 duplicate symbol for architecture x86_64)
static NSString * SEString = @"SEString";
@implementation SEObject
+ (void)add {
    NSLog(@"%@",SEString);
    SEString = @"SEString2";
    NSLog(@"%@",SEString);
}
SEString
SEString2
@end

static不能与extern组合使用,否则报错:Cannot combine with previous 'extern' declaration specifier

声明在.h文件时,引入该类,依然可以使用并修改此静态全局变量;

声明在.m文件时,两个类文件可是使用相同变量名,彼此相互独立。

全局变量和静态变量区别(摘抄)

两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

const

const修饰的变量是不可变的。

正确用法:

static NSString * const SEString = @"SEString";

以下两种写法const修饰的是* SEString,*是指针指向符,也就是说此时指向内存地址是不可变的,而内存保存的内容时可变的

static NSString const * SEString = @"SEString";
static const NSString * SEString = @"SEString";

局部变量

函数内部声明的变量,仅在当前函数执行期间存在。

@implementation SEObject

- (void)add {
    NSInteger a = 1;
    NSInteger b = 2;
    NSInteger c = a+b;
    NSLog(@"c = %ld",c);
}

@end

static - 静态局部变量

用static修饰的局部变量为静态局部变量,存储在全局区,生命周期为整个程序运行期间。

- (void)add {
    NSInteger a = 1;
    NSInteger b = 2;
    static NSInteger c2;
    c2 += a+b;
    NSLog(@"c2 = %ld",c2);
}
调用两次结果:
c2 = 3
c2 = 6

以上就是iOS关键字static extern const使用示例详解的详细内容,更多关于iOS关键字static extern const的资料请关注脚本之家其它相关文章!

相关文章

  • IOS-MVC层读取服务器接口JSON数据

    IOS-MVC层读取服务器接口JSON数据

    这篇文章主要为大家详细介绍了IOS-MVC层读取服务器接口JSON数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • iOS中的UIKeyboard键盘视图使用方法小结

    iOS中的UIKeyboard键盘视图使用方法小结

    键盘视图我们平时在做App的时候都要调用得到,这里我们就来整理一下iOS中的UIKeyboard键盘视图使用方法小结,需要的朋友可以参考下
    2016-06-06
  • iOS百度地图简单使用详解

    iOS百度地图简单使用详解

    百度地图的功能有很多,本篇文章主要介绍了iOS百度地图简单使用详解,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • iOS 拨打电话代码的三种方式

    iOS 拨打电话代码的三种方式

    本文给大家分享三种方式实现ios拨打电话的代码,非常不错,具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
    2016-11-11
  • iOS使用WKWebView加载HTML5不显示屏幕宽度的问题解决

    iOS使用WKWebView加载HTML5不显示屏幕宽度的问题解决

    这篇文章主要介绍了iOS使用WKWebView加载HTML5不显示屏幕宽度的问题解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • iOS实现去除html标签的方法汇总

    iOS实现去除html标签的方法汇总

    相信大家在做网站的时候,经常会遇到去除html标签的问题,下面这篇文章主要给大家总结介绍了关于iOS如何实现去除html标签的一些方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • iOS开发验证判断语句之正则表达式小结

    iOS开发验证判断语句之正则表达式小结

    最近在公司接手重构一个项目,发现之前的开发在验证格式这块写的太乱了,到处都有相关的验证代码,所以就有了这篇文章,供自己收藏也分享给有需要的朋友们参考借鉴,下面跟着小编来一起学习学习吧。
    2016-12-12
  • iOS 按钮上的文字添加下划线的方法

    iOS 按钮上的文字添加下划线的方法

    这篇文章主要介绍了iOS 按钮上的文字添加下划线的方法的相关资料,需要的朋友可以参考下
    2016-05-05
  • iOS中CPU线程调试的高级技巧分享

    iOS中CPU线程调试的高级技巧分享

    这篇文章主要给大家介绍了关于iOS中CPU线程调试的高级技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 详解iOS App中UiTabBarController组件的基本用法

    详解iOS App中UiTabBarController组件的基本用法

    UiTabBarController组件即是用来创建App中的Tab视图切换选项栏,下面将详解iOS App中UiTabBarController组件的基本用法,包括左右滑动切换标签页等基本功能的实现,需要的朋友可以参考下
    2016-05-05

最新评论