强指针
- 默认情况下,我们声明一个指针 这个指针就是1个强指针
- 我们也可以使用__strong来显式声明这是一个强指针
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是个弱指针,所以对象就被回收了
网友评论