Chapter 10 - 强指针 弱指针

2019-03-06  本文已影响0人  锐視角RaysJoe

强指针

Person *p1; 这是一个强指针,指针默认情况下都是强指针
__strong Person *p2; 这也是一个强指针,使用__strong来显式的声明强指针
弱指针:使用__weak标识的指针就叫做弱指针

无论是强指针还是弱指针,都是指针,都可以用来存储地址,这1点没有任何区别
都可以通过这个指针访问对象的成员
唯一的区别就是在ARC模式下,他们用来作为回收对象的基准

如果1个对象没有任何强类型的指针指向这个对象的时候,对象就会被自动释放

确认程序是否开启了ARC模式

1.默认情况下,XCode开启ARC机制
2.ARC机制下,不允许调用retain、release、retainCount、autorelease方法
3.在dealloc中 不允许[super dealloc]

演示第一个ARC案例

int main (int argc, const char *argv[])
{
    @autoreleasepool
    {
        Person *p1 = [Person new];   //p1是个强指针
        NSLog(@"------------");
    }  //当执行到这里的时候,p1指针被回收,那么Person对象就没有任何强指针指向它了,对象就在这里被回收
      return 0;
}
int main (int argc, const char *argv[])
{
    @autoreleasepool
    {
        __strong Person *p1 = [Person new]; 
        __weak Person *p2 = p1; 
        p1 = nil;
    } 
      return 0;
}

p1 = nil,p1就不指向这个对象了,只剩下p2指这个对象,但是p2是个弱指针,所以对象就被回收了
上一篇下一篇

猜你喜欢

热点阅读