《单页面传值》

页面传值,从前向后传值,使用属性,在后一个页面定义属性,在前一个页面,用点语法,获得值,在适当的时候传值

页面传值,从后向前面传值,使用协议和代理,在后一个页面指定协议,定义属性,在前一个页面设置代理对象,在前一个页面的类使其服从协议,在前一个页面实现协议的方法,在后一个页面消失的时候,吧对应的数据作为协议的方法的参数传入第一个页面。
 
《多页面传值》
我们使用单例模式,创建一个继承与 NSObject  的基类,然后定义一个创键单例对象的方法,然后设置一个(用来保存传入的数据)属性(@proterty)(nonatomic,copy)NSstring * data;
定义在方法的外部的变量就是全局变量,(static singletion  * single =nil)单例类用来创建单例对象

//(为了保证单例类只有一个对象,我们用静态变量来存储对象的指针,一旦发现指针变量为空,则创建单例对象,否则直接返回原来对象的地址)实现

//对象只有 alloc 没有 release ,这样就存在内存泄露的问题,一般创建单例是用来解决特定的问题,不到万不得已,一般是不会使用单例

//加锁  安全处理

@synchronized(self){

if (!singltion) {

singltion = [[Singleton alloc]init];

}

}

关于加载图片的时候占用大量内存的解决方案:

**imageNamed:创建的对象图片会在内存中存储一份,占用内存空间。

经常使用的图片,使用该方法创建对象, 比如图标
UIImage *image = [UIImage imageNamed:@"iphone"];
这种方法只能适用于加载的一些图片很少 或者图片很小 不适用于加载大量图片
用imageNamed的方式加载时,系统会把图像Cache到内存。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且释放图像的 内存是一件相对来说比较麻烦的事情。例如:如果利用imageNamed的方式加载图像到一个动态数组NSMutableArray,然后将将数组赋予一 个UIView的对象的animationImages进行逐帧动画,那么这将会很有可能造成内存泄露。并且释放图像所占据的内存也不会那么简单。但是利 用imageNamed加载图像也有自己的优势。对于同一个图像系统只会把它Cache到内存一次,这对于图像的重复利用是非常有优势的。例如:你需要在 一个TableView里重复加载同样一个图标,那么用imageNamed加载图像,系统会把那个图标Cache到内存,在Table里每次利用那个图 像的时候,只会把图片指针指向同一块内存。这种情况使用imageNamed加载图像就会变得非常有效

**根据路径加载图片
imageWithContentsOfFile是只显示图片,但不加到内存中。
所以加载大量图片的时候用imageWithContentsOfFile比较好,内存不会变大。
对于列表界面的图片加载,使用以下方式
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpg"]];
UIimage 是图片,不是控件;他的父类为NSObject;
UIImageView是加载图片的控件,父类为UIView 是一个图片加载类 更相当于一个相框 里面可以存放多张图片
//注意:不管用哪种图片加载图片,图像使用结束后,一定要记得显示释放内存

轻量级的数据本地化

NSUserDefaults适合存储轻量级的本地数据,
NSUserDefaults是一个单例,在整个程序中只有一个实例对象;
NSUserDefaults支持的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.

注意问题:

通过查看官方文档。UserDefaults不是立即写入,而是根据时间戳定时的把缓存中的数据写入本地磁盘。所以调用了set方法之后数据有可能还没有写入磁盘应用程序就终止了。出现以上问题。可以通过调用synchornize方法强制写入。

要点:

1)NSUserDefaults非常好用,并不需要用户在程序中设置NSUserDefaults的全局变量,需要在哪里使用NSUserDefaults的数据,那么就在哪里创建一个NSUserDefaults对象,然后进行读或者写操作。

2)针对同一个关键字对应的对象或者数据,可以对它进行重写,重写之后关键字就对应新的对象或者数据,旧的对象或者数据会被自动清理。

NSUserDefaults用于存储数据量小的数据,例如用户配置。并不是所有的东西都能往里放的,只支持:NSString,NSNumber, NSData, NSArray, NSDictionary,详细方法可以查看类文件。既然可以存储Nsdata 那么只要能够转化为二进制的文件都能够进行本地化的存储。

NSUserDefaultsstandardUserDefaults用来记录一下永久保留的数据非常方便,不需要读写文件,而是保留到一个NSDictionary字典里,由系统保存到文件里,系统会保存到该应用下的/Library/Preferences/gongcheng.plist文件中。需要注意的是如果程序意外退出,NSUserDefaultsstandardUserDefaults数据不会被系统写入到该文件,不过可以使用[[NSUserDefaults standardUserDefaults] synchronize]命令直接同步到文件里,来避免数据的丢失,这样用户在下次打开程序的时候,数据就不会丢失。

UI:页面传值、单例模式传值、属性传值、NSUserDefaults 数据持久化的更多相关文章

  1. Swift进阶之路(一)——单例模式、属性传值、代理传值、闭包传值

    一.单例模式 单例模式是设计模式中最简单的一种,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象. 关于单例,有三个重要的准则需要牢 ...

  2. iOS开发备忘录:属性列表文件数据持久化

    属性列表文件是一种XML文件,Foundation框架中的数组和字典等都可以于属性列表文件相互转换. NSArray类常用读写属性列表文件的方法: +arrayWithContentsOfFile:类 ...

  3. 四大传值详解:属性传值,单例传值,代理传值,block传值

    一:属性传值 传值情景:从前一个页面向后一个页面传值 a.在后一个页面,根据传值类型和个数,写属性 b.在前一个页面, 为属性赋值 c.在后一个页面, 使用值 例如: 第一个视图: #import & ...

  4. 属性传值,协议传值,block传值,单例传值四种界面传值方式

    一.属性传值 对于属性传值而言,相对于其它的三种 方法来说,是最基础,最简单的一种 方法,但,属性传值 有很大的局限性,因为是适用于第一个界面向第二个界面传 值,第二个向第三个界面传值等等.N界面向N ...

  5. iphone开发中数据持久化之——属性列表序列化(一)

    数据持久化是应用程序开发过程中的一个基本问题,对应用程序中的数据进行持久化存储,有多重不同的形式.本系列文章将介绍在iphone开发过程中数据持久化的三种主要形式,分别是属性列表序列号.对象归档化以及 ...

  6. iOS 页面间几种传值方式(属性,代理,block,单例,通知)

    第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视 ...

  7. iOS 页面跳转传值,属性传值,代理传值,代码块传值,单例传值,通知传值

    有时候我们在页面跳转的时候回传递相应的参数,如,你想把在第一个页面的文本框里的内容显示在第二个文本框中,或者你又想把第二个文本框中的内容改变之后到第一个页面的文本框中,所有,这个时候我们就要用到页面跳 ...

  8. iOS 页面间传值 之 属性传值,代理传值

    手机 APP 运行,不同页面间传值是必不可少,传值的方式有很多(方法传值,属性传值,代理传值,单例传值) ,这里主要总结下属性传值和代理传值. 属性传值:属性传值是最简单,也是最常见的一种传值方式,但 ...

  9. 四种传值方法(通知、block、属性、NSUserDefaults)

    1. 通知传值-一般常用于返回界面的时候,把返回前界面的值传到返回后界面. //前一个界面 //注册通知 [[NSNotificationCenter defaultCenter] addObserv ...

随机推荐

  1. 【转】strcpy溢出的攻击示例

    在学习c/c++的时候,就讲到了一些C类型的字符串函数不是安全的,比如strcpy没有检查长度会溢出,推荐使用strncpy,笔试面试也经常问到.同时经常浏览安全相关的新闻,缓冲区溢出攻击是很常见的一 ...

  2. 【英语】Bingo口语笔记(41) - 有关爱情的表达

  3. android studio开发工具的android library打包文件(.aar)本地引用

    by 蔡建良 2014-5-13 关键点: 利用Gradle发布本地maven库支持android library 打包文件(*.aar) 的本地引用 开发环境: windows7 64位操作系统 a ...

  4. centos 安装mysql 登录进提示 Access denied for user 'root'@'localhost' (using password: NO)

    # service mysqld stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & # mysql ...

  5. 嵌入式 uboot以及kernel添加看门狗临时记录(个人记录未整理乱)

    Uboot_Kernerl_Add_Watch_Dog: U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM:  128 MiBCheck spi flash c ...

  6. EasyDarwin返回401 Unauthorized解决方法

    在向EsayDarwin发起 RTSP DESCRIBE请求或者ANNOUNCE推送时,EasyDarwin会返回401 Unauthorized: 原因:在EasyDarwin的RTSP Sessi ...

  7. 怎样预防Ddos攻击

    一.为何要DDOS? 随着Internet互联网络带宽的增加和多种DDOS黑客工具的不断发布,DDOS拒绝服务攻击的实施越来越容易,DDOS攻击事件正在成上升趋势.出于商业竞争.打击报复和网络敲诈等多 ...

  8. Linux 下部署单机 hadoop 测试

    最终运行结果展示: 格式化namenode. 开始测试 显示测试进程 浏览器查看效果展示:(虽然还不清楚是什么意思,但是能看到这个效果已经很开心了) 话不多说,进入主题: 1. 安装 VMwareSt ...

  9. JavaScript对象(document对象 图片轮播)

    图片轮播: 需要注意的HTML需要img标签,他和input标签一样,是非封闭的标签 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...

  10. oracle 定时任务(DBMS_JOB)

    示例如下: -- 每隔一分钟执行存储过程p1 create or replace procedure p2 as job_num number; begin dbms_job.submit(job_n ...