当前位置:网站首页 > Vue.js开发 > 正文

auto可以说明全局变量吗(autojs定义全局变量)



知识点一、 众所周知,在很多地方都要用到全局变量,因为在一个地方声明赋值的过的对象成员或变量经常在别的地方被使用。例如在一个表示登录页控制器中的登录信息要在别的地方使用到,最常见的做法是别的控制器中也定义一个此变量属性,在跳转之前 对此变量属性进行赋值,这样做只能一对一的进行传递而且麻烦费事有很多弊端。最好的方法是定义一个全局变量——在一个地方赋值,在同一程序的任意地方都能获取到。经过总结发现,在IOS中定义全局变量的方法也无非就以下几种:

(一)直接利用extern

(二)在AppDelegate.h中声明属性变量

(三)直接创建单例对象

(四)使用NSuserDefaults类进行存储

注意:全局变量的特点就是一方赋值,多方使用

详细介绍如下所示:

第一种:直接利用extern—— 这种方式的使用原理是 在文件1的.m文件中@implementation和@end之间 成员方法之外声明一个全局变量 “全局变量类型 全局变量名”,然后把文件1的头文件导入到使用全局变量的控制器中(或直接导入到pch文件中) 这样被导入的控制器(工程中的所有文件)中在同样的位置加上 “extern 全局变量类型 全局变量名” 就可以直接使用此全局变量了。

使用此种方法应该注意的是:

  • 全局变量的声明语句只能写在.m文件的@implementation和@end之间 成员方法之外。不然的话会出现链接错误,编译不通过。切记:全局变量的声明语句不加extern。
  • 必须把声明全局变量控制器的头文件导入使用此全局变量的控制器的头文件中,最好是直接导入到pch文件中这样工程中的所有文件只要加上“extern 全局变量类型 全局变量名” 就可以直接使用已经声明过的全局变量了。
  • 在使用已声明过的全局变量的控制器中 必须加上“extern 全局变量类型 全局变量名” 至于添加位置可以在写在.m文件的@implementation和@end之间 成员方法之外。也可以写在.h文件的@interface之前,但是如果变量是自定义类的对象时必须要加自定义类的前向声明。

第二种:在 AppDelegate.h 中声明任意类型的变量属性(如果要想使变量属性名和变量名一致的话就在 AppDelegate.m文件中加@synthesize语句与之对应 ) 。在别的地方获取或赋值的方法如下:

切记:AppDelegate也是一个单例对象,所以以同样的方式在其他文件的任何地方获取同名属性都是同一个。

第三种:直接创建单例对象。即将类定义为单例就意味着,全局只有一个此类的对象。无论再怎样修改 alloc 怎样做改动始终都是在一个对象上做操作

第四种:使用NSUserDefaults类可以把任意类型的变量或对象类型存进沙盒目录下的 Library/Preference/plist文件中,但是要注意的是,如果要存放自定义的对象或类型还要让自定义类遵守NSCoding协议并实现编码解码方法。还要注意的是:此类还有removeObject方法用于删除plist文件下的某个属性,防止泄密。此外对于同样的key表示同一个属性,对同一key赋值多次会造成覆盖。

知识点二、如果使用一个单例直接在其类中设置单例属性即可,但是当有很多单例时就会变得相当繁琐。另外,一旦某个类被设置成了单例就意味着只有一个对象,永远无法改动。这时使用单例工厂就变得非常有用,单例工厂可以根据你传过来的类对象(类对象即[类名 Class] 不是类的对象)生产出一个此类的单例对象,每次要使用此类的单例对象时主要用单例工厂生产(调用单例工厂的方法即可)。而且还不影响此类别的对象的使用,切记:使用单例工厂生产的都是单例对象,在获取时也必须调用单例工厂来获取。

知识点三、由于成员方法必须由类或类的对象调用变得很麻烦,可以在.m文件中写一个函数,然后在别的地方直接使用即可,但前提是必须将此方法在头文件中声明 否则别的文件是找不到此函数的。函数的声明格式如下:

在其.h文件中@interface之上添加如下代码段:

工程目录如下:

iOS 开发全局变量_#import

编辑AppDelegate.h 添加变量如下:

编辑NSSingletonFactory.h如下:

编辑Person.h如下:

Book.h

viewController.m

iOS 开发全局变量_iOS 开发全局变量_02

到此这篇auto可以说明全局变量吗(autojs定义全局变量)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • redhat6.6安装教程(redhat6.0安装)2025-01-18 14:54:09
  • dos2unix安装包(如何安装dos6.22)2025-01-18 14:54:09
  • cjson(CJSON遍历json所有节点)2025-01-18 14:54:09
  • vue2关闭eslint(vue 关闭eslint)2025-01-18 14:54:09
  • 跨域解决方案js(nginx跨域解决方案)2025-01-18 14:54:09
  • ubuntu18.04源地址(ubuntu21.04源)2025-01-18 14:54:09
  • k8s版本升级(k8s版本升级1.27)2025-01-18 14:54:09
  • Ubuntu源码下载(ubuntu21.04源)2025-01-18 14:54:09
  • ubuntu18镜像(ubuntu18.04镜像)2025-01-18 14:54:09
  • js指什么意思(jsjs是什么意思)2025-01-18 14:54:09
  • 全屏图片