ios-锁和空间和单例知识点

为了保证线程安全,可能会需要进行加锁,常见的锁机制大概有这么几种

NSLock;
NSConditionLock;
dispatch_semaphore_t;
@synchronized (self) {
}

关于空间的描述

  • 1、栈区(stack) 临时变量,局部变量(自动分配内存)
  • 2、堆区(heap) alloc new malloc calloc(程序员手动分配的内存, 在非ARC的时候,由程序员手动释放, ARC模式(注意对象不被循环引用,系统就会自动释放 (对象引用计数器)))在CoreFoundation框架中我们也是需要自己去释放的。栈内存分配运算内置于处理器的指令集,效率很高,但是分配的内存容量有限
  • 3、全局区(静态变量, 全局变量,在我们编译的时候就分配空间了,程序结束后,由自动释放)
  • 4、常量区(常量 const,在我们编译的时候就分配空间了,程序结束后,由自动释放)
  • 5、代码区(存放代码的区域)

当我们在程序中如果去使用[[UIApplication alloc] init]; 再去创建UIApplication对象会崩溃,因为这个对象是单例只允许有一个。如果我们把init去掉,我们会发现程序没有崩溃

这就说明这个异常应该是在init方法中被抛出的。

我们可以自己去模拟在alloc方法中判断单例对象存不存在,如果存在就抛出异常。如果我们子类继承了这个重写了下面的alloc方法的类的话,子类也是无法创建的。因为默认会去调用[super alloc]方法。

+ (instancetype)alloc{


    if (singleInstance) {

        NSException *exception = [NSException exceptionWithName:@"error" reason:@"无法创建" userInfo:nil];
        [exception raise];

    }
    return  [super alloc];

}

在这里再补充下断言的知识,只在Debug版本下有效果,Xcode 已经默认将release环境下的断言取消了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值