黑马程序员技术交流社区
标题:
野指针相关?
[打印本页]
作者:
远人
时间:
2014-4-20 15:03
标题:
野指针相关?
本帖最后由 远人 于 2014-4-20 15:06 编辑
<font color="#000000">#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
- (void)dealloc;
@end
#import "Person.h"
@implementation Person
- (void)dealloc
{
NSLog(@"Person对象被回收了");
[super dealloc];
}
@end
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
Person *p = [[Person alloc] init];
NSUInteger n = [p retainCount];
NSLog(@"%ld",n);
//2
[p retain];
NSInteger n2 = [p retainCount];
NSLog(@"%ld",n2);
//1
[p release];
//0
[p release]; //在老师的讲解中,此处Person对象的计数器为0 ,就应该回收Person对象,
// [p release];
[p retain];//此处,再进行retain操作就应该报错,这是对野指针进行操作,但是运行不但没有错误,后面检验的计数器显示居然为2,这是什么原因?
NSInteger n3 = [p retainCount];
NSLog(@"%ld",n3);
return 0;</font>
复制代码
这段代码是关于野指针的,问题的细节我在代码中又详细询问,这究竟是什么原因?
}
作者:
远人
时间:
2014-4-20 21:54
马凯文 发表于 2014-4-20 18:23
你把所有的去掉就好了!
苹果官方文档有说明,不要调用retainCount 。它不可以作为调试的依据,因为内存管 ...
恩,看了,总结这句话最有用:当release对象后,其retain count计数如果为0,建议nil一次,对其所指内容进行一次清空。
谢了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2