您的位置:首页 > 移动开发 > IOS开发

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.第二个页面创建的对象和上个页面地址完全一样,如果没有修改属性,将会具有是个页面的属性



一个页面属性修改,所有页面都会一样:直接添加对象就会得到第二页所有的属性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: