永发信息网

ios 可以将单例付值给一个新的对象吗

答案:1  悬赏:60  手机版
解决时间 2021-12-01 09:42
ios 可以将单例付值给一个新的对象吗
最佳答案
第一、基本概念单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问。第二、在IOS中使用单例模式的情况1.如果说创建一个对象会耗费很多系统资源,那么此时采用单例模式,因为只需要一个实例,会节省alloc的时间2.在IOS开发中,如果很多模块都要使用同一个变量,此时如果把该变量放入单例类,则所有访问该变量的调用变得很容易,否则,只能通过一个模块传递给另外一个模块,这样增加了风险和复杂度第三、创建单例模式的基本步骤1.声明一个单例对象的静态实例,并初始化为nil2.声明一个类的工厂方法,生成一个该类的实例,并且只会生成一个3.覆盖allcoWithZone方法,确保用户在alloc 时,不会产生一个多余的对象4.实现NSCopying协议,覆盖release,autorelease,retain,retainCount方法,以确保只有一个实例化对象5.在多线程的环境中,注意使用@synchronized关键字 [cpp] view plaincopyprint?// // UserContext.h // SingleDemo // // Created by andyyang on 9/30/13. // Copyright (c) 2013 andyyang. All rights reserved. // #import @interface UserContext : NSObject @property (nonatomic,retain) NSString *username; @property(nonatomic,retain)NSString *email; +(id)sharedUserDefault; @end [cpp] view plaincopyprint?// // UserContext.m // SingleDemo // // Created by andyyang on 9/30/13. // Copyright (c) 2013 andyyang. All rights reserved. // #import "UserContext.h" static UserContext *singleInstance=nil; @implementation UserContext +(id)sharedUserDefault { if(singleInstance==nil) { @synchronized(self) { if(singleInstance==nil) { singleInstance=[[[self class] alloc] init]; } } } return singleInstance; } + (id)allocWithZone:(NSZone *)zone; { NSLog(@"HELLO"); if(singleInstance==nil) { singleInstance=[super allocWithZone:zone]; } return singleInstance; } -(id)copyWithZone:(NSZone *)zone { NSLog(@"hello"); return singleInstance; } -(id)retain { return singleInstance; } - (oneway void)release { } - (id)autorelease { return singleInstance; } - (NSUInteger)retainCount { return UINT_MAX; }@end [cpp] view plaincopyprint?#import #import "UserContext.h" int main(int argc, const char * argv[]) { @autoreleasepool { UserContext *userContext1=[UserContext sharedUserDefault]; UserContext *userContext2=[UserContext sharedUserDefault]; UserContext *userContext3=[[UserContext alloc] init]; UserContext *userContext4=[userContext1 copy]; // insert code here... NSLog(@"Hello, World!"); } return 0; } 在开发中我们可以利用ios提供的方法来实现单例模式:SYNTHESIZE_SINGLETON_FOR_CLASS(MyClassName);将该语句置于@implementation MyClassName声明后,这样你的类自动会变成单例。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
理的事,怎么你有好好的家庭不过
三个务物误猜成语
单选题有三个力:F1=2N,F2=5N,F3=8N,则
矩阵证明 题目
godaddy如何批量购买域名更便宜?
枫林镇的介绍
给朋友送礼物还说啥,虽然礼物很小……请不要
形容农民浇地苦的作文
聚空间有做店经验吗?
为什么玻璃栈道要吓人
为什么说喜欢木匠活崇祯皇帝是个好男人?
巩义市哪里有办公室摆件
罗各庄到东直门
1到10连加不能重复等数不能大于10每个数都要
谜画之塔的介绍
推荐资讯
野葫芦引的文学鉴赏
同为粉丝,真爱粉和黑粉有什么质的区别
单选题气体膨胀对外做功100J,同时从外界吸收
一首歌 dj舞曲 开头是by my side , everywhe
足球场中山门地址在什么地方,想过去办事,
My first football 【小题1】( compete) was
算命的害了多少人贴吧
广东卫视热播《岁月如金》的齐少菲扮演者是谁
本人准备投资做木屑颗粒,现在担心销路问题,
卧式废纸打包机液压油得不少于多少
0.605乘以1000的数是
冬天瑞雪普降雪花飘飘洒洒可爱极2-4段是什么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?