iOS多页面传值方式之单例传值singleton
2016-03-15 18:04
281 查看
// 要实现单例传值,那就必须得新建一个类做为单例
提供创建该类对象的类方法(因为是要在alloc开辟内存空间后赋值)。所有在.h文件中声明该方法
+ (instancetype)defaultUIImageView;
实现该方法
前提得有一个静态全局变量来保存该类对象的指针
// 静态全局变量
static DefaultValueViewController *singleton;
// 提供方法创建单例对象
#pragma mark - defaultUIViewController
+ (instancetype)defaultUIViewController
{
// 懒加载
if (!singleton)
{
singleton = [[DefaultValueViewController alloc] init];
}
return singleton;
}
堵缺口
// 1.堵缺口:避免不是调用你提供的方法创建对象,注意些保证其它方式创建的对象都是同一个
#pragma mark - allocWithZone
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
if (!singleton)
{
singleton = [super allocWithZone:zone];
}
return singleton;
}
堵缺口
// 2.堵缺口:copy方法为对象方法,因此直接返回它的指针就行
注意:因为此时创建的单例不是直接继承至NSObject而是UIImageView,因此默认是遵循了<NSCopying>协议的
#pragma mark - copy
- (id)copy
{
return self;
}
#pragma mark - Xcode
三个类对比
1.创建对象给一些属性赋值,并在点击屏幕时推送到下一页
2.第二个页面创建的对象和上个页面地址完全一样,如果没有修改属性,将会具有是个页面的属性
一个页面属性修改,所有页面都会一样:直接添加对象就会得到第二页所有的属性
提供创建该类对象的类方法(因为是要在alloc开辟内存空间后赋值)。所有在.h文件中声明该方法
+ (instancetype)defaultUIImageView;
实现该方法
前提得有一个静态全局变量来保存该类对象的指针
// 静态全局变量
static DefaultValueViewController *singleton;
// 提供方法创建单例对象
#pragma mark - defaultUIViewController
+ (instancetype)defaultUIViewController
{
// 懒加载
if (!singleton)
{
singleton = [[DefaultValueViewController alloc] init];
}
return singleton;
}
堵缺口
// 1.堵缺口:避免不是调用你提供的方法创建对象,注意些保证其它方式创建的对象都是同一个
#pragma mark - allocWithZone
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
if (!singleton)
{
singleton = [super allocWithZone:zone];
}
return singleton;
}
堵缺口
// 2.堵缺口:copy方法为对象方法,因此直接返回它的指针就行
注意:因为此时创建的单例不是直接继承至NSObject而是UIImageView,因此默认是遵循了<NSCopying>协议的
#pragma mark - copy
- (id)copy
{
return self;
}
#pragma mark - Xcode
三个类对比
1.创建对象给一些属性赋值,并在点击屏幕时推送到下一页
2.第二个页面创建的对象和上个页面地址完全一样,如果没有修改属性,将会具有是个页面的属性
一个页面属性修改,所有页面都会一样:直接添加对象就会得到第二页所有的属性
相关文章推荐
- iOS开发中的火星坐标系及各种坐标系转换算法
- IOS的KVO不能监听的场景
- iOS本地推送
- iOS下KVO使用过程中的陷阱
- iOS倒计时
- iOS 高德地图(二)(进阶具体使用的细节)
- iOS 高德地图(-)(基础篇)
- iOS- CALayer绘图,如何绘制渐变效果图
- iOS属性传值
- ios实现条形码扫描功能
- iOS下KVO使用过程中的陷阱
- iOS 工程中 Other Linker Flags
- iOS:禁止手势滑动切换界面
- iOS runtime 运行时( 三 深谈)
- iOS访UC、腾讯视频播放
- iOS 多线程 GCD的简单使用——iOS 编码复习(七)(多线程5)
- IOS基础:声音调用
- iOS开发中集成Reveal
- # iOS_Search Path $(SRCROOT)和$(PROJECT_DIR)
- JSPatch: iOS App 动态更新服务平台