美文网首页
OC语言day05-04野指针和空指针

OC语言day05-04野指针和空指针

作者: liyuhong165 | 来源:发表于2016-06-02 23:54 被阅读124次

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

相关文章

网友评论

      本文标题:OC语言day05-04野指针和空指针

      本文链接:https://www.haomeiwen.com/subject/lgvkdttx.html