MVC架构模式与xib
2016-08-21 19:53
141 查看
MVC架构模式
M:Model,模型,保存数据
V:View,视图,显示控件及数据
C:Controller,控制器,传递数据,管理视图
![](http://img.blog.csdn.net/20160829204048826?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Xib
1).xib文件是一种自定义视图。
2)创建方法:File—New—File,选择iOS—User Interface—View/Empty。
3)好处:可以先设计好自定的视图,然后调用
4)编译运行后,在应用程序包中是以.nib文件存在
5)读取并使用nib文件的两种方法:
知识点:
1、帧动画
创建帧动画有两种方式
第一种是将图片数组组装成动画图片
第二种方法是:
2、plist文件的两种读取方式
plist文件存在应用程序包中,首先要找到包路径,然后才能读取文件。
获取包路径的方法:
1)URL读取
2)文件路径
3、使用UIImage时会导致内存大量增加
如果图片资源较大,或者在for循环中使用UIImage:
UIImage使用imageNamed:方法加载图片,系统会自动帮助缓存,所以内存大量增加,解决办法是从文件读取,代替上述方法:
使用imageWithContentsOfFile: 使用完后会自动释放,不会缓存图片。
此时注意:图片资源不能放在Assets.xcassets文件夹下面。因为上述找文件路径的方法只能在包的根目录下查找。放在Assets.xcassets文件夹下,程序在编译运行后,会将所有图片压缩到根目录下一个文件中,无法找到这些图片资源。
因此要放置到Supporting Files,并复制、创建分组。
4、控制器到控件的引用链条
View Controller→(强引用)View→(强引用)subViews→(强引用)控件(子视图)。
View Controller对控件(子视图)是弱引用关系。
若视图控制器对控件是强引用,也不会造成内存泄漏,因为没有构成循环引用,但是会造成空间的延迟释放。
5、动画嵌套使用
M:Model,模型,保存数据
V:View,视图,显示控件及数据
C:Controller,控制器,传递数据,管理视图
Xib
1).xib文件是一种自定义视图。
2)创建方法:File—New—File,选择iOS—User Interface—View/Empty。
3)好处:可以先设计好自定的视图,然后调用
4)编译运行后,在应用程序包中是以.nib文件存在
5)读取并使用nib文件的两种方法:
//第一种方法 /// 加载nib文件的方法:特别注意!!! -- 不要写扩展名 UIView *bgView = [[[NSBundle mainBundle] loadNibNamed:@"HMColorView" owner:nil options:nil] firstObject]; [self.view addSubview:bgView];
//第二种方法 // 这里注意:bundle = nil 是默认去‘包’的根目录去找 UINib *nib = [UINib nibWithNibName:@"HMColorView" bundle:[NSBundle mainBundle]]; UIView *bgView = [[nib instantiateWithOwner:nil options:nil] lastObject];
知识点:
1、帧动画
创建帧动画有两种方式
第一种是将图片数组组装成动画图片
// 将图片数组 ,组装成一个动画图片 UIImage *image = [UIImage animatedImageWithImages:imagesM.copy duration:0.1 * imagesM.count]; // 把动画图片设置给UIIMageView self.imageView.image = image; // [self.imageView setAnimationRepeatCount:1]; 设置动画播放次数不起作用
第二种方法是:
// 创建存放图片的可变数组 NSMutableArray *imagesM = [NSMutableArray array]; for (int i = 1; i <= 25; i++) { // 拼接图片名称 NSString *imageName = [NSString stringWithFormat:@"father%03d",i]; // 创建图片对象 UIImage *image = [UIImage imageNamed:imageName]; // 添加到数组里面 [imagesM addObject:image]; } // 设置动画图片数组 self.imageView.animationImages = imagesM.copy; // 设置动画时间 [self.imageView setAnimationDuration:0.1 * imagesM.count]; // 设置动画播放次数 [self.imageView setAnimationRepeatCount:1]; // 注意!!!!不要忘了开启动画 [self.imageView startAnimating];
2、plist文件的两种读取方式
/* plist文件的作用:存储数据 plist文件的本质:是xml文件,什么是xml文件?Extensible Markup Language - xml:可扩展标记语言,详细关于xml语言我们放在网络多线程讲解。简单说xml语言就是一个节点有开始<node> 同时也有结束</node> 例如: <key>icon</key> <string>greenMan</string> plist 文件存放到哪里了? 我们的应用程序在安装到手机上的时候回被‘打包’, 通过 [NSBundle mainBundle] 查找到‘包’的路径;(每一次运行‘包’路径都不相同,每一次都会生成新的‘包’) plist文件就被放在包的根目录下 通过 [[NSBundle mainBundle] pathForResource:ofType:] 方法在‘包’的根目录下查找文件,返回文件的路径 */
plist文件存在应用程序包中,首先要找到包路径,然后才能读取文件。
获取包路径的方法:
[[NSBundle mainBundle] bundlePath];//应用程序的包路径
1)URL读取
//获取URL地址 NSURL *url = [[NSBundle mainBundle] URLForResource:@"demo" withExtension:@"plist"]; //plist文件内容要么是NSArry,要么是NSDictionary //加入我们知道plist文件里存放的是 字典,我们还可以通过 NSDictionary 的 dictionaryWithContentsOfFile:方法加载 NSArray *arrDict = [NSArray arrayWithContentsOfURL:url]; for (NSDictionary *dict in arrDict) { NSLog(@"%@",dict); }
2)文件路径
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"plist"]; // 加载数据 NSArray *arrDict = [NSArray arrayWithContentsOfFile:filePath]; for (NSDictionary *dict in arrDict) { NSLog(@"%@",dict); }
3、使用UIImage时会导致内存大量增加
如果图片资源较大,或者在for循环中使用UIImage:
UIImage *image = [UIImage imageNamed:imageName];
UIImage使用imageNamed:方法加载图片,系统会自动帮助缓存,所以内存大量增加,解决办法是从文件读取,代替上述方法:
// 获取文件路径 NSString *filePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"]; // 创建图片对象 UIImage *image = [UIImage imageWithContentsOfFile:filePath];
使用imageWithContentsOfFile: 使用完后会自动释放,不会缓存图片。
此时注意:图片资源不能放在Assets.xcassets文件夹下面。因为上述找文件路径的方法只能在包的根目录下查找。放在Assets.xcassets文件夹下,程序在编译运行后,会将所有图片压缩到根目录下一个文件中,无法找到这些图片资源。
因此要放置到Supporting Files,并复制、创建分组。
4、控制器到控件的引用链条
View Controller→(强引用)View→(强引用)subViews→(强引用)控件(子视图)。
View Controller对控件(子视图)是弱引用关系。
若视图控制器对控件是强引用,也不会造成内存泄漏,因为没有构成循环引用,但是会造成空间的延迟释放。
5、动画嵌套使用
// 以动画的形式让Label显示出来 // 延迟1秒钟,开始‘消失’动画 // 消失动画结束后,移除label,并且禁用按钮 [UIView animateWithDuration:1 animations:^{ // 让Label以1秒动画的速度,透明度从0 到 0.7 label.alpha = 0.7; } completion:^(BOOL finished) { // 延迟1秒后,让透明度从 0.7 到 0 [UIView animateWithDuration:1 delay:1 options:UIViewAnimationOptionCurveLinear animations:^{ label.alpha = 0; } completion:^(BOOL finished) { // 禁用按钮 sender.enabled = NO; // 最后移除掉Label [label removeFromSuperview]; }]; }];
相关文章推荐
- Sun 官方的 MVC 架构模式蓝图
- 模式与架构系列之一:MVC
- MVC架构模式
- [转载]MVP(SC),MVP(PV),PM,MVVM 和 MVC 表现模式架构对比
- MVC架构中的模式
- 面向模式的软件架构 卷1_2(MVC+PAC)
- MVC在Web系统中的模式与应用--架构模式
- 精通android体系架构、mvc、常见的设计模式、控制反转(ioc)
- Android架构: MVC 模式加载数据 前台显示
- 关于三层架构,MVC模型,工厂设计模式三者
- MVC架构模式
- 观察者模式、MVP、MVC、三层架构
- MVC在Web系统中的模式与应用--架构模式
- MVC架构模式与利用JAVABEAN分页!(原创)
- MVC架构模式学习(1)
- mvc 软件架构模式
- 精通android体系架构、mvc、常见的设计模式、控制反转(ioc)
- 软件架构/ 框架 /设计/模式以及MVC是设计模式还是架构模式
- Android架构: MVC 模式加载数据 前台显示