美文网首页
OC,MRC下给一个对象发送消息

OC,MRC下给一个对象发送消息

作者: 最强的小强 | 来源:发表于2018-11-19 18:03 被阅读0次

1.MRC下给一个已经销毁的对象就会崩溃,
NSObject *object = [[NSObject alloc]init]; NSLog(@"释放前------%lu",[object retainCount]); [object release]; // 会崩溃,报错: EXC_BAD_ACCESS (code=1, address=0x3d92e8185228) NSLog(@"释放后------%lu",[object retainCount]);
2.向nil对象发送消息就没问题
NSObject *object = [[NSObject alloc]init]; NSLog(@"释放前------%lu",[object retainCount]); object = nil; NSLog(@"释放后------%lu",[object retainCount]);

注意: objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,然后在发送消息的时候,objc_msgSend方法不会返回值,所谓的返回内容都是具体调用时执行的。那么,如果向一个nil对象发送消息,首先在寻找对象的isa指针时就是0地址返回了,所以不会出现任何错误。

这里就要区分空指针和野指针,

野指针:已经销毁被释放的对象,指针指向的内存已经不可用,称为野指针;
野指针非常危险,所以一个好的做法是把他置为nil;
空指针:对象被赋值为nil,被称为空指针。

相关文章

  • OC,MRC下给一个对象发送消息

    1.MRC下给一个已经销毁的对象就会崩溃,NSObject *object = [[NSObject alloc]...

  • 理解OC中的消息机制

    OC中在对象上调用方法其实就是给该对象发送一个消息,比如 例子中,可以理解为给student对象发送一个消息,其中...

  • iOS消息机制相关

    (1)OC中给nil对象发送消息程序是否会crash? OC向nil发送消息,是不会崩溃的。 OC的函数调用都是通...

  • iOS消息机制相关

    OC中给nil对象发送消息程序是否会crash? OC想nil发送消息,是不会崩溃的。 OC的函数调用都是通过ob...

  • 使用NSMethodSignature消息转发

    消息转发是什么 在oc中调用方法就是发送消息(msgSend),如果给一个实例对象(Instance)发送一个未定...

  • 消息转发机制(message forwarding)及其应用场景

    引言:OC是一种消息语言,OC对象调用方法,就是给对象发送消息,这个过程称为消息传递,那如果对象接收到了无法解读的...

  • 关于Runtime 消息发送机制的延伸

    说到OC 不得不说一下OC 的消息转发机制;何为OC 的消息转发机制;其实就是这样的; Objc 在向一个对象发送...

  • MRC、ARC内存管理机制

    MRC下,oc内存管理遵循“谁创建、谁释放、谁引用、谁管理”的机制,当创建或引用一个对象时,需要向她发送alloc...

  • MRC、ARC内存管理机制

    MRC下,oc内存管理遵循“谁创建、谁释放、谁引用、谁管理”的机制,当创建或引用一个对象时,需要向她发送alloc...

  • Runtime 应用

    Method Swizzling 在OC语言的runtime特性中,调用一个对象的方法就是给这个对象发送消息。是通...

网友评论

      本文标题:OC,MRC下给一个对象发送消息

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