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

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内存管理的,转载一下与你共享概述我们知道在程序运行过程中要创建大量的对象,和其他高级...
    niceSYT阅读 460评论 0 2
  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 9,086评论 3 38
  • 学习目标 1.【理解】对象在内存中的存储 2.【理解】nil和NULL 3.【了解】#pragma mark分组导...
    Hm丶阅读 485评论 0 3
  • void* 类型指针:通用变体类型指针;可以不经转换,赋给其他指针,函数指针除外;malloc返回的就是void*...
    冰吉凌阅读 3,369评论 0 18
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,753评论 0 4