pragma mark 野指针和空指针
pragma mark 概念
/**
__func__ 打印 当前的类名、方法名、方法类型
// 野指针
// 当一个指针 指向 一个僵尸对象, 我们就称 这个指针 为野指针
// 只要一个野指针 发送消息 就会报错
// 空指针
空指针 nil 0
// 为了避免给野指针发送消息会报错,一般情况下, 当一个对象被释放后,我们会将这个对象的指针 设置为空指针
// 因为 在 OC中给空指针 发送消息是不会报错的
p = nil;
*/
pragma mark 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person * p = [[Person alloc]init];
#warning 只要一个对象被释放了, 我们就称 这个对象 为 “僵尸对象”
// 当一个指针 指向 一个僵尸对象, 我们就称 这个指针 为野指针
// 只要一个野指针 发送消息 就会报错
[p release]; // 1-1 = 0
// [Person release]: message sent to deallocated instance 0x100500ef0 (发送一个已经消失的对象)
#warning 打开僵尸对象 修改项目的配置 Edit Scheme(编辑计划) --> Run(运行) --> Diagnostics(诊断)
#warning 空指针 nil 0
// 为了避免给野指针发送消息会报错,一般情况下, 当一个对象被释放后,我们会将这个对象的指针 设置为空指针
// 因为 在 OC中给空指针 发送消息是不会报错的
p = nil;
[p release];
[p release];
[p release];
[p release];
[p release];
[p release];
[p release];
}
return 0;
}
Person.h //人类
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
@end
Person.m
#import "Person.h"
@implementation Person
- (void)dealloc
{
NSLog(@"%s",__func__); // 打印当前方法的名字
[super dealloc];
}
@end
网友评论