IOS常用封装总结

//封装总结
如何封装?

1.确定变化点

*.数据变化点(数据模型), 重写set

*.通信(代理, block)

2.确定一个容器(UIView)

3.逻辑搭建

*.UI 搭建

*.响应 UI 的逻辑

//1>登录模块的封装(新建类继承自UIVIew)
1.代理的作用
 *封装变化点
 *解决类与类之间的强耦合性
 *可以在类之间进行数据传递
2.什么情况下使用代理
 *有一系列的变化点,能够让用户清晰的知道到底有哪些变化点被封装起来了
//登录封装变化点:需要用代理来传递密码和用户名
3.外部(.h)
*提供一个类方法用于外界获取到自己(xib加载)
*提供代理方法,传递数据给控制器
4.内部(.m)
*定义子控件(UITestField,UIButton)
*定义按钮事件(实现代理方法,传递数据)

//2>控制器
1.初始化数据源(重写get方法 实现懒加载)
2.加载并初始化视图,建立父子关系
2.传递数据源

//3>封装ScrollView广告轮播(新建类继承自UIView)
1.外部(.h)
*提供一个类方法。用于外界获取到自己
*提供一个代理方法,当点击scrollView上的方法时,控制器获取此按钮事件时执行相应的操作
- (void)adsViewDidSelected:(GPAdsView *)adsView andImage:(NSString *)image andIndex:(NSInteger)index;
@property(nonatomic,assign)id<GPAdsViewDelegate> delegate;
*提供一个NSArray属性,存储数据,用于传递scrollView需要的数据
2.内部(.m)
*定义控件属性(pageControl,Timer,ScrollView等)
*实现类方法,返回一个UIView对像
*在initFrame对象方法中,实例化控件,设置一些控件的基本属性(此时不建议设置大小,大小应有父类获取到并赋值)并保存,添加到父视图中
/* 在初始化子视图时最好是先创建一个新视图,再赋值给自己的属性视图
 */
注:在视图示例化时最终调用的是initframe方法,init ->initFrame
*在willMoveToSuPerView设置主视图的frame及其属性,并给子控件设置大小
//子控件参考父控件设置 Frame 值
*重写数据的set方法,给scrollView添加子视图,更新本视图的所有数据
//1.设置依赖于数据的一些属性
//2.计算ScrollView的 ContentSize
//3.给 ScrollView 添加子控件
*添加NSTimer,实现自动播放功能,在ScrollDidScroll方法中,更新pageControl的当前页
// 创建:NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(autoScroll) userInfo:nil repeats:YES];
// 将一个 timer 对象加入到最主要的事件循环中
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
// 1.计算当前应该显示到的具体页数
// 2.更新scrollView的偏移量
 在scrollViewWillBeginDragging方法中销毁Timer,在scrollViewDidEndDragging方法中重新创建Timer(NSTimer一旦停止就会被销毁,所以得重写创建,为了让广告不受其他操作的影响,应该在创建Timer对象时给它提供多线程处理,加入到最主要的事件循环中[[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes];)

4> 封装UITableView(新建xib,继承自UIView)
1.外部(.h)
*提供一个类方法,用于外界获取到自己
*提供一个数组属性(控制器数据源数组数据),存储外界传来的数据(用于定义行数,以及cell数据)
2.内部(.m)
*实现类方法,返回一个UITableView(从xib获得)
//return [[[NSBundle mainBundle] loadNibNamed:@"GPContentView" owner:nil options:nil] lastObject]
*继承UITableView 数据源方法,实现numberOfRowsInSection方法及其cellForRowAtIndexPath方法(返回的是自定义的cell对象,自定义cell对象提供模型数据,将控制器传来的数据源赋给cell的模型对象)
*重写数据源的set方法,将外界传递过来的数据保存,并且一定要更新tableView对象数据([self.tableView reloadData])
*在awakeFromNib方法中给tableView添加子控件(如:广告轮播添加到头视图)
// 只要当前对象是从 xib 文件中加载来的,就会自动调用awakeFromNib方法

5>封装cell(新建xib,继承自UITableViewCell)
// 考虑cell复用机制
//去内存池中取可重用的 cell
//1.如果有给你返回一个可重用的 cell
//2.如果没有,自动创建一个返回给你用
* 对于频繁加载的 xib 文件,不要使用loadNibNamed
//注册 直接使用类名作为唯一标识
+ (id)subjectCellWithTableView:(UITableView *)tableView
{
  // 1.注册 直接使用类名作为唯一标识
  NSString * Identifier = NSStringFromClass([self class]);
  // 2.创建UINib对象
  UINib * nib = [UINib nibWithNibName:Identifier bundle:nil];
 // 3.使用注册机制, xib 文件上不需要再去加上重用标识
 [tableView registerNib:nib forCellReuseIdentifier:Identifier];
 // 4.复用返回
 return [tableView dequeueReusableCellWithIdentifier:Identifier];
}

1.外部(.h)
*提供一个类方法,用于外界获取到自己
+ (id)subjectCellWithTableView:(UITableView *)tableView;
*提供一个数组数据(模型数据),存储模型数据用于给Cell属性赋值
*提供一个带有参数的类方法,用于从缓冲池中取的Cell数据
2.内部(.m)
*定义子控件
*实现类方法,返回一个UITableViewCell对象(从xib中获得)
*实现带参数的类方法(从传过来的tableView缓冲池中取出有相同ID的Cell数据,返回一个Cell)
*重写数据的set方法,给Cell的属性赋值

6>模型封装(模型数据,继承自NSobject)

*将需要的数据属性抽象成模型属性(一般是NSDictionary,将字典里的key值和模型属性一一对应)
*提供一个类方法和一个对象方法(因为操作习惯,会不自觉的使用类方法初始化,所以在实例化时最好提供一个类方法),都带字典参数
*实现类方法和对象方法创建模型( [self setValuesForKeysWithDictionary:dict];)
*对于嵌套模型,应当在重写init方法是再将子模型模型封装
- (id)initWithDict:(NSDictionary *)dict
{
    if (self = [super init])
    {
        [self setValuesForKeysWithDictionary:dict];
        NSMutableArray * objs = [NSMutableArray array];
        for (NSDictionary * dic in self.friends)
        {
            GPFriend * friend = [GPFriend friendWithDict:dic];
            [objs addObject:friend];
        }
        //更新一下自己的 friends 属性
        _friends = objs;
    }
    return self;
}
*当有字典属性和系统关键字冲突时调用forUndefinedKey方法解决
/**
 *  没有定义属性
 */
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
{
    if ([key isEqualToString:@"id"]) {
        self.iD = value;
    }
}

时间: 2024-08-09 06:02:57

IOS常用封装总结的相关文章

IOS常用的第三方开发库

开发几个常用的开源类库及下载地址: 1.json json编码解码2.GTMBase64 base64编码解码3.TouchXML xml解析4.SFHFKeychainUtils 安全保存用户密码到keychain中5.MBProgressHUD 很棒的一个加载等待特效框架6.ASIHTTPRequest http等相关协议封装7.EGORefreshTableHeaderView 下拉刷新代码8.AsyncImageView 异步加载图片并缓存代码9.类似setting的竖立也分栏程序 10

IOS常用设计模式——单例模式(IOS开发)

IOS常用的设计模式包括:单例模式.委托模式.观察者模式和MVC模式. 这里主要讲单例模式 单例模式 -问题: 主要解决应用中只有一个实例的问题(只需要某个类的实例) -原理:一般会封装一个静态属性,并提供静态实例的创建方法 -应用:单例类 // Singleton.h @interface Singleton : NSObject + (Singleton *)sharedManager; @property (nonatomic, strong) NSString* stingletonDa

iOS常用基础框架和第三方类库

iOS 常用基础框架 框架名称 功能 Foundation 提供OC的基础类(像NSObject).基本数据类型等 UIKit 创建和管理应用程序的用户界面 QuartzCore 提供动画特效以及通过硬件进行渲染的能力 CoreGraphics 提供2D绘制的基于C的API SystemConfiguration 检测当前网络是否可用和硬件设备状态 AVFoundation 提供音频录制和回放的底层API,同时也负责管理音频硬件 CFNetwork 访问和配置网络,像HTTP.FTP和Bonjo

iOS常用加密方法(aes、md5、base64)

1.代码 iOS常用加密方法(aes.md5.base64) 1.AES加密 NSData+AES.h文件 // // NSData-AES.h // Smile // // Created by 周 敏 on 12-11-24. // Copyright (c) 2012年 BOX. All rights reserved. // #import <Foundation/Foundation.h> @class NSString; @interface NSData (Encryption)

iOS常用类库

ios 常用第三方类库 分享类型:游戏开发相关 http://blog.csdn.net/wstarx/article/details/6317779 http://iosdeveloper.diandian.com/post/2011-05-21/932272            开发几个常用的开源类库及下载地址: 1.json json编码解码2.GTMBase64 base64编码解码3.TouchXML xml解析4.SFHFKeychainUtils 安全保存用户密码到keychai

iOS常用框架源码分析

SDWebImage NSCache 类似可变字典,线程安全,使用可变字典自定义实现缓存时需要考虑加锁和释放锁 在内存不足时NSCache会自动释放存储的对象,不需要手动干预 NSCache的key不会被复制,所以key不需要实现NSCopying协议 第三方框架 网络 1.PPNetworkHelper 对AFNetworking 3.x 与YYCache的二次封装 简单易用,包含了缓存机制,控制台可以直接打印json中文字符 2..YTKNetwork 猿题库研发团队基于AFNetworki

iOS常用控件尺寸大集合

元素控件 尺寸(pts) Window(含状态栏) 320 x 480 Status Bar的高度 20 Navigation Bar的高度 44 含Prompt的Navigation Bar的高度 74 Navigation Bar的图标 20×20(透明的png) Tool Bar的高度 44 Tool Bar的图标 20×20(透明的png) Tab Bar的高度 49 Tab Bar的图标 30×30(透明的png) 竖直时键盘的高度 216.252(iOS 5+的中文键盘) 水平时键盘

iOS常用的加密算法

在iOS开发中,为了数据的安全经常对内容进行加密,在这儿我们对常用的加密算法进行了总结: 1.MD5 <span style="font-size:18px;">+ (NSString *)md5Hash:(NSString *)str { const char *cStr = [str UTF8String]; unsigned char result[16]; CC_MD5( cStr, strlen(cStr), result ); NSString *md5Resu

iOS常用的忽略警告

在iOS开发过程中,偶尔会碰到一些编译器警告,如果能够确定该警告不会影响到程序的正常运行,则可以手动告诉编译器忽略掉这个警告 iOS常用的忽略警告类型: 1.方法弃用警告 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations"//过期的方法#pragma clang diagnostic pop 2.不兼容指针类型警告 #pragma clang diagnos