永发信息网

ios单例里面的数组在哪实例化最好

答案:2  悬赏:10  手机版
解决时间 2021-03-23 13:32
  • 提问者网友:棒棒糖
  • 2021-03-23 04:31
ios单例里面的数组在哪实例化最好
最佳答案
  • 五星知识达人网友:洎扰庸人
  • 2021-03-23 05:27
第一、基本概念
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问。
第二、在IOS中使用单例模式的情况
1.如果说创建一个对象会耗费很多系统资源,那么此时采用单例模式,因为只需要一个实例,会节省alloc的时间
2.在IOS开发中,如果很多模块都要使用同一个变量,此时如果把该变量放入单例类,则所有访问该变量的调用变得很容易,否则,只能通过一个模块传递给另外一个模块,这样增加了风险和复杂度
第三、创建单例模式的基本步骤
1.声明一个单例对象的静态实例,并初始化为nil
2.声明一个类的工厂方法,生成一个该类的实例,并且只会生成一个
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声明后,这样你的类自动会变成单例。
全部回答
  • 1楼网友:大漠
  • 2021-03-23 06:37
所有编程语言的单例模式都大同小异。Object-c, Java, C++等,跟语言没有太大关系,只跟语法有点关系而己。 在IOS 中假如你有一个类:AccountManager,你要定义单例则步法如下: 一. 在.h文件中应该有类似如下定义: + (id) sharedInstance; 二. 在.m文件内类应该有如下定义: //声明一个全局唯一的静态对象,也是AccountManager类型 static AccountManager * _sharedInstance; //方法实现 + (id) sharedInstance { @synchronized ([AccountManagerclass]) { if (_sharedInstance == nil) { _sharedInstance = [[AccountManageralloc] init]; } } return_sharedInstance; } 三. 你在别的类对象中如果要使用该单例,并调用该单例的某方法(todoSomething)为: [[Accoun...
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯