单例,函数的三种调用方式

简介: 单例,函数的三种调用方式

函数的调用方式有三种:

第一种:通过self来调用本对象的成员函数

- (IBAction)captureOrderButtonPressed:(UIButton *)sender

{

[self checkUserStateWithSender:sender];

}

第二种:通过类名调用静态全局函数

MBProgressHUD.h

+(void)hudShowWithStatus :(id)viewcontroller : (NSString *)string;//显示1.8消失的提示框

MBProgressHUD.m

+(void)hudShowWithStatus :(id)viewcontroller :(NSString *)string

{

[MBProgressHUD hudShowWithStatus:viewcontroller :string intervl:1.8];

}

调用处:

[MBProgressHUD hudShowWithStatus:self :[error localizedDescription]];

第三种:通过单例对象来调用单例的函数。

API.h

+ (instancetype)shareAPI;

- (void)updateLocationParams:(NSDictionary *)params block:(void(^)(NSError *error))block;//更新地理位置

API.m

- (void)updateLocationParams:(NSDictionary )params block:(void (^)(NSError ))block

{

NSMutableDictionary *muParams = [NSMutableDictionary dictionaryWithDictionary:params];

[muParams setObject:g_updateLocationCmd forKey:@”cmdCode”];

[self GET:@”resetLngLatJsonPhone.htm” params:muParams success:^(AFHTTPRequestOperation *operation, id responseObject) {

if (responseObject) {

FLDDLogDebug(@”success”);

if (block) {

block(nil);

}

}

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

FLDDLogInfo(@”error”);

if (block) {

block(error);

}

}];

}

调用:

[[API shareAPI] updateLocationParams:muParams block:^(NSError *error) {

g_updatingLocation = NO;

if (!error) {

FLDDLogDebug(@”updata location success”);

g_loginStat = LOGIN_STATE_LOGIN_SUCESS;

if (self.segmentedControl.selectedSegmentIndex == 0)

{

[self setupRefresh];

}

else

{

[self getOrders];

}

// [self getOrders];

[self showNoticeView];

// [self setupRefresh];

}

else

{

g_loginStat = LOGIN_STATE_UNLOCATION_LOGIN;

}

[self showNoticeView];

}];

+ (instancetype)shareAPI
{
    static API *shareAPI = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{

#ifdef DEBUG
        NSString *baseUrl = [AppManager valueForKey:@"RootUrl"];

        if (baseUrl.length == 0) {
            baseUrl = @"http://test.zuixiandao.cn/fhl/phone/psy/";
            [AppManager setUserDefaultsValue:baseUrl key:@"RootUrl"];
        }

        shareAPI = [[API alloc] initWithBaseURL:[NSURL URLWithString:baseUrl]];

#else
        shareAPI = [[API alloc] initWithBaseURL:[NSURL URLWithString:BaseURL]];

#endif

    });
    shareAPI.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];//设置相应内容类型
    shareAPI.securityPolicy.allowInvalidCertificates = NO;

    [shareAPI.requestSerializer setTimeoutInterval:g_requeRespondTime];
    return shareAPI;
}

单例又称单子,保证系统的在调用中只生成一个对象,所以若把全局变量存在单例里面就能在通过这个单例访问这些全局变量了。所以IOS的APP几乎都用全局变量,也可以实现部分全局函数代替部分静态全局函数。

通过以下几行代码就能实现单例,简单吧:

+(Singleton *) sharedInstance

{

static Singleton *sharedInstace = nil;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

    sharedInstace = [[self alloc] init];
});

return sharedInstace;

}


若你对C/C++念念不忘也可以用.h文件定义全局变量,在.m文件里包含全局变量头文件就可以,注意在.mm文件里不能用包含全局变量的头文件的方式引用全局变量,需要用extern 声明你需要用到全局变量。一个变量可以有多个声明,只允许一个定义。

extern NSString *g_deviceType;


目录
相关文章
|
Unix Linux 程序员
Linux必知词汇:GNU通用公共许可证 GPL(GNU General Public License)
Linux必知词汇:GNU通用公共许可证 GPL(GNU General Public License)
2977 0
成功解决OSError: Unable to open file (truncated file: eof = 8388608, sblock->base_addr = 0, stored_eof =
成功解决OSError: Unable to open file (truncated file: eof = 8388608, sblock->base_addr = 0, stored_eof =
成功解决OSError: Unable to open file (truncated file: eof = 8388608, sblock->base_addr = 0, stored_eof =
|
10月前
|
安全 网络安全 网络架构
电脑提示“Waiting for Device”的解决方案
电脑提示“Waiting for Device”的解决方案
821 4
|
运维 Linux Apache
如何使用`systemctl status`命令来查看服务状态?
如何使用`systemctl status`命令来查看服务状态?
1262 0
|
安全 新能源 数据安全/隐私保护
行级权限登场,向繁琐的视图授权说拜拜
为了解决视图授权和维护繁琐的问题,Dataphin V4.1 推出行级权限功能,支持灵活控制不同账号对计算引擎表的可见范围,帮助统一构建数据基座的企业,实现各子公司、大区、业务部之间的数据隔离。
245 5
|
资源调度 JavaScript 测试技术
单元测试:编写和运行Vue组件的单元测试
【4月更文挑战第23天】本文探讨了为Vue组件编写单元测试的重要性,以及如何设置测试环境、编写和运行测试。通过使用Jest或Mocha作为测试框架,结合Vue Test Utils,可以独立测试组件的功能,如渲染、事件处理和状态管理。编写测试用例时,应注意覆盖各种行为,并使用断言验证组件状态。运行测试并观察结果,确保测试独立性和高覆盖率。单元测试是保证代码质量和维护性的关键,应随着项目发展持续更新测试用例。
283 3
|
数据可视化 C# 图形学
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
856 0
|
缓存 安全 网络架构
Win10更新错误0x80070422?尝试这些解决方案快速修复!
Win10更新错误0x80070422?尝试这些解决方案快速修复!
|
安全 Shell Linux
openEuler OECA认证课程习题答案
本文整理了OECA认证课程的每章节课后习题答案。
660 2
openEuler OECA认证课程习题答案