博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS中的单实例的实现
阅读量:6493 次
发布时间:2019-06-24

本文共 2615 字,大约阅读时间需要 8 分钟。

我们知道在Cocoa Touch框架中有许多类是以单实例方式存在的,例如:UIApplication, NSUserDefault, UIDevice, NSFileManager等等; 当我们使用这些类的时候,我们得到的实例永远是同一个。今天我就将我不久之前实现的一个单实例类介绍给大家:

类名:Carrier (运营商)

作用:提供一些有关运营商的信息。

//

//  Carrier.h
//  Carrier Information
//
#import <Foundation/Foundation.h>
@interface Carrier : NSObject {
@private
    NSString *_carrierName;  // 运营商名称(中国移动、中国联通)
    NSString *_carrierCode; // 运营商国际编码(中国移动:46000,46002 中国联通:46001)
    NSString *_carrierServiceNumber; // 运营商服务热线(中国移动:10086 中国联通:10010)
}
@property (nonatomic, readonly) NSString *carrierName;
@property (nonatomic, readonly) NSString *carrierCode;
@property (nonatomic, readonly) NSString *carrierServiceNumber;
+ (id)currentCarrier;
@end

//
//  Carrier.m
//  Carrier Information
//
#import "Carrier.h"
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
static Carrier *carrier = nil;
@implementation Carrier
@synthesize carrierName = _carrierName;
@synthesize carrierCode = _carrierCode;
@synthesize carrierServiceNumber = _carrierServiceNumber;
+ (id)currentCarrier {
    @synchronized(self) {
        if (carrier == nil) {
            carrier = [[Carrier alloc] init];
        }
    }    
    return carrier;
}
- (id)init {
    self = [super init];
    if (self) {
        CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
        _carrierName = [[NSString alloc] initWithString:info.subscriberCellularProvider.carrierName];
        NSMutableString *mutableString = [[NSMutableString alloc] initWithString:info.subscriberCellularProvider.mobileCountryCode];
        [mutableString appendString:info.subscriberCellularProvider.mobileNetworkCode];
        _carrierCode = mutableString;
        
        if ([mutableString isEqualToString:@"46001"]) {
            _carrierServiceNumber = [[NSString alloc] initWithString:@"10010"];
        } else if ([mutableString isEqualToString:@"46000"] || [_carrierCode isEqualToString:@"46002"]) {
            _carrierServiceNumber = [[NSString alloc] initWithString:@"10086"];
        } else {
            _carrierServiceNumber = [[NSString alloc] initWithString:NSLocalizedString(@"Unknow Carrier", @"")];
        }
        [info release];
    }
    
    return self;
}
+ (id)allocWithZone:(NSZone *)zone{
    @synchronized(self) {
        if (carrier == nil) {
            carrier = [super allocWithZone:zone];
            return carrier;
        }
    }
    return nil;
}
- (void)dealloc {
    [_carrierName release];
    [_carrierCode release];
    [_carrierServiceNumber release];
    [super dealloc];
}
/
- (id)retain {
    return self;
}
- (oneway void)release {
    
}
- (id)autorelease {
    return self;
}
- (NSUInteger)retainCount {
    return NSUIntegerMax;
}
/
- (id)copyWithZone:(NSZone *)zone {
    return self;
}
@end

iOS中的单利编程是十分必要的,它可以为我们节省很多系统资源,所以我们认为在必要的时候我们要使用单实例设计模式。

转载于:https://www.cnblogs.com/OtionSky/archive/2011/11/17/iOS_Singleton.html

你可能感兴趣的文章
04-dbutils源码之 各种ResultSetHandler实现类
查看>>
今天小小的继续一下
查看>>
github desktop 官方离线下载地址
查看>>
hive动态分区
查看>>
php 日志库获取调用方的代码文件地址和代码行数
查看>>
浏览器加载和渲染网页顺序
查看>>
微服务架构springcloud
查看>>
深入剖析Android系统试读样章
查看>>
测试用例出错重跑--flaky插件
查看>>
yaf的安装
查看>>
比较java与C++的不同
查看>>
Twitter Storm入门
查看>>
Windows 平台安装 MongoDB
查看>>
Linux Tar Split压缩解压缩分片压缩解压缩
查看>>
使用scikit-learn进行文本分类
查看>>
Ansible自动化运维配置与应用(结合实例)
查看>>
下面简要介绍软件工程的七条原理
查看>>
java POI实现excel实现表格导出
查看>>
Hadoop 新 MapReduce 框架 Yarn 详解
查看>>
Lua(三)——语句
查看>>