详解IOS 单例的两种方式

发布时间 - 2026-01-11 03:18:13    点击率:

详解IOS 单例的两种方式

方法一:

#pragma mark - 
#pragma mark sharedSingleton methods 
 
//单例函数 
static RtDataModel *sharedSingletonManager = nil; 
 
+ (RtDataModel *)sharedManager 
{ 
  @synchronized(self) { 
    if (sharedSingletonManager == nil) { 
      sharedSingletonManager = [[self alloc] init]; 
    } 
  } 
  return sharedSingletonManager; 
} 
 
+ (id)allocWithZone:(NSZone *)zone 
{ 
  @synchronized(self) { 
    if (sharedSingletonManager == nil) { 
      sharedSingletonManager = [super allocWithZone:zone]; 
      return sharedSingletonManager; // assignment and return on first allocation 
    } 
  } 
  return nil; //on subsequent allocation attempts return nil 
} 
 
- (id)copyWithZone:(NSZone *)zone 
{ 
  return sharedSingletonManager; 
} 
 
- (id)retain 
{ 
  return sharedSingletonManager; 
} 
 
- (NSUInteger)retainCount 
{ 
  return UINT_MAX; //denotes an object that cannot be released 
} 
 
- (oneway void)release 
{ 
  //do nothing 
} 
 
- (id)autorelease 
{ 
  return sharedSingletonManager; 
} 
 
//单例函数结束 

方法二:

.h文件

#import <Foundation/Foundation.h> 
 
@interface RtTestDataModel : NSObject 
{ 
  NSMutableArray      * _buyDataTArray; 
  NSMutableArray      * _sellDataTArray; 
} 
 
+ (RtTestDataModel *)sharedManager; 
 
- (void)addOptionBuyDataArrayModel: (NSMutableArray *)DataArray; 
- (NSMutableArray *)getOptionBuyDataArrayModel; 
 
@end 

.m文件

#import "RtTestDataModel.h" 
 
@implementation RtTestDataModel 
 
+ (RtTestDataModel *)sharedManager 
{ 
  static RtTestDataModel *sharedManager = nil; 
  static dispatch_once_t predicate; 
   
  dispatch_once(&predicate,^{ 
    sharedManager = [[RtTestDataModel alloc]init]; 
  }); 
 
  return sharedManager; 
} 
 
- (void)dealloc 
{ 
  [_buyDataTArray removeAllObjects]; 
  [_buyDataTArray release]; 
   
  [super dealloc]; 
} 
 
- (id)init 
{ 
  self = [super init]; 
   
  if (self != nil) { 
    _buyDataTArray = [[NSMutableArray alloc] initWithCapacity:8]; 
  } 
  return self; 
} 
 
- (void)addOptionBuyDataArrayModel: (NSMutableArray *)DataArray{ 
   
  if (DataArray != nil) { 
     
    [_buyDataTArray removeAllObjects]; 
    [_buyDataTArray addObjectsFromArray:DataArray]; 
  } 
} 
 
- (NSMutableArray *)getOptionBuyDataArrayModel{ 
   
  return _buyDataTArray; 
} 
@end 


如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# IOS  # 单例  # 单例模式  # 单例的实现方法  # iOS单例的创建与销毁示例  # IOS Swift3 四种单例模式详解及实例  # 使用设计模式中的Singleton单例模式来开发iOS应用程序  # iOS App开发中使用设计模式中的单例模式的实例解析  # IOS 中两种单例模式的写法实例详解  # 谈一谈iOS单例模式  # iOS开发教程之单例使用问题详析  # 如有  # 两种  # 希望能  # 谢谢大家  # 疑问请  # allocWithZone  # zone  # NSZone  # id  # alloc  # init  # return  # super  # copyWithZone  # retain  # NSUInteger  # attempts  # assignment  # allocation  # subsequent 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: java ZXing生成二维码及条码实例分享  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Bootstrap整体框架之JavaScript插件架构  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何在景安服务器上快速搭建个人网站?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  如何在香港服务器上快速搭建免备案网站?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  如何确保FTP站点访问权限与数据传输安全?  Python进程池调度策略_任务分发说明【指导】  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  如何快速搭建支持数据库操作的智能建站平台?  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  jQuery validate插件功能与用法详解  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Laravel如何自定义分页视图?(Pagination示例)  香港服务器部署网站为何提示未备案?  Laravel如何实现事件和监听器?(Event & Listener实战)  手机软键盘弹出时影响布局的解决方法  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  微信小程序 input输入框控件详解及实例(多种示例)  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  新三国志曹操传主线渭水交兵攻略  如何在IIS服务器上快速部署高效网站?  利用JavaScript实现拖拽改变元素大小  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel如何实现API速率限制?(Rate Limiting教程)  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  LinuxCD持续部署教程_自动发布与回滚机制  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel如何实现一对一模型关联?(Eloquent示例)  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  如何生成腾讯云建站专用兑换码?  非常酷的网站设计制作软件,酷培ai教育官方网站?  Firefox Developer Edition开发者版本入口  Laravel如何使用Sanctum进行API认证?(SPA实战)  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置