nil

Objecitive-C中的nil

让人想犯罪 __ 提交于 2019-12-29 19:58:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 当我学习OC的时候,我总是忍不住在对比。Actionscript是如何实现,而oc又是如何实现。这不,碰到nil的时候我发现了很大的不同之处。做个笔记。 在as中,如果将一个对象置为null,相当于空指针,那么后续对该对象的操作会报错。而在编码中,我们常常会判断if(obj == nul )来判断该对象是否存在,存在的话才可以进行后续操作。 而在oc中,nil就相当于c、c++中的NULL指针,一般释放对象后将对象置为nil非常重要,这样可以防止引用非法指针导致程序崩溃掉。 [obj release];//此时obj的引用计数为0 [obj someMethod];//程序崩溃 [obj release]; obj = nil; [obj someMethod];//obj此时为nil,但不会崩溃 在objective-c中我们只用nil来检查程序的逻辑,而不用于判断对象是否为空来避免崩溃。这与c++是不同。objective-c在运行时会自动处理向nil对象发送消息(调用方法),不会报错崩溃掉。 来源: oschina 链接: https://my.oschina.net/u/865151/blog/115702

golang: 详解interface和nil

ぃ、小莉子 提交于 2019-12-01 14:55:22
golang的nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。nil是预先说明的标识符,也即通常意义上的关键字。在golang中,nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果未遵循这个规则,则会引发panic。对此官方有明确的说明: http://pkg.golang.org/pkg/builtin/#Type golang中的interface类似于java的interface、PHP的interface或C++的纯虚基类。接口就是一个协议,规定了一组成员。这个没什么好说的,本文不打算对宏观上的接口概念和基于接口的范式编程做剖析。golang语言的接口有其独到之处:只要类型T的公开方法完全满足接口I的要求,就可以把类型T的对象用在需要接口I的地方。这种做法的学名叫做 Structural Typing ,有人也把它看作是一种静态的Duck Typing。所谓类型T的公开方法完全满足接口I的要求,也即是类型T实现了接口I所规定的一组成员。 在底层,interface作为两个成员来实现,一个类型和一个值。对此官方也有文档说明: http://golang.org/doc/go_faq.html#nil_error ,如果您不习惯看英文,这里有一篇柴大的翻译: