使用全局变量的四种方式:extern、AppDelegate、定义单例对象、NSUserDefaults 和单例工厂的使用方法

本文介绍了在iOS中定义全局变量的四种方法:extern关键字、在AppDelegate中声明属性、创建单例对象和使用NSUserDefaults。同时,还讨论了单例工厂的使用,它能根据传入的类对象生成单例,方便管理多个单例对象。全局变量和单例在确保多方共享数据的同时,应注意其使用规范和潜在问题。
摘要由CSDN通过智能技术生成

知识点一、 众所周知,在很多地方都要用到全局变量,因为在一个地方声明赋值的过的对象成员或变量经常在别的地方被使用。例如在一个表示登录页控制器中的登录信息要在别的地方使用到,最常见的做法是别的控制器中也定义一个此变量属性,在跳转之前 对此变量属性进行赋值,这样做只能一对一的进行传递而且麻烦费事有很多弊端。最好的方法是定义一个全局变量——在一个地方赋值,在同一程序的任意地方都能获取到。经过总结发现,在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 *delegate = (AppDelegate *)[[UIApplicationsharedApplication]delegate];

delegate.strAppDelegate =@"AppDelegate中的全局变量";

 NSLog(@"AppDelegate全局=%@",delegate.strAppDelegate);

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

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

第四种:使用NSUserDefaults类可以把任意类型的变量或对象类型存进沙盒目录下的 Library/Preference/plist文件中,但是要注意的是,如果要存放自定义的对象或类型还要让自定义类遵守NSCoding协议并实现编码解码方法。还要注意的是:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值