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

函数的调用方式有三种:
第一种:通过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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值