self、nil、id用法专题总结
id的用法,举个简单例子,很容易就理解和掌握了。例:#import <Cocoa/Cocoa.h>
#import "Converter.h"
@interface Controller : NSObject {
IBOutlet id converter;
IBOutlet id dollarField;
IBOutlet id rateField;
IBOutlet id totalField;
}
-(IBAction)convert:(id)sender;
@end
另外再举一个例子。
@interface MyController:NSObject{
IBOutlet id textField;//插座变量通常使用id关键字动态地指定类型。您可将id关键字用作任何对象的类型,意味这个对象的类在运行环境中才确定。
// IBOutlet NSTextField *textField;// 当您不需要动态类型对象时,应该静态地指定插座变量为指向对象的指针。
}
@end
self用法详解,专题总结!
objective-c语言中的self,就相当于C++中的this指针。
学会使用self,首先要搞清楚属性这一概念。
以及理解getter和setter方法,它到底有什么用?
设置器与访问器,提供外界操作 类内部属性的 一个通道。假如,没有这个方法,外界怎么操作类的内部属性。假如不提供这两个方法,那么这个属性的值,就不能为外界所改变。
因为类的属性,一般是private 。属性一般是私有的。
nil用法
Objective-C中nil
nil
nil和C语言的NULL相同,在objc/objc.h中定义。nil表示一个Objctive-C对象,这个对象的指针指向空(没有东西就是空)。
Nil
首字母大写的Nil和nil有一点不一样,Nil定义一个指向空的类(是Class,而不是对象)。
在Objective-C里,nil对象被设计来跟NULL空指针关联的。他们的区别就是nil是一个对象,而NULL只是一个值。而且我们对于nil调用方法,不会产生crash或者抛出异常。
这个技术被framework通过多种不同的方式使用。最主要的就是我们现在在调用方法之前根本无须去检查这个对象是否是nil。假如我们调了nil对象的一个有返回值的方法,那么我们会得到一个nil返回值。
我们可以通过nil对象让我们的dealloc函数实现看上去更帅一点:
- (void) dealloc
{
self.caption = nil;
self.photographer = nil;
[super dealloc];
}
之所以可以这么做是因为我们给把nil对象设给了一个成员变量,setter就会retain nil对象(当然了这个时候nil对象啥事情也不会做)然后release旧的对象。这个方式来释放对象其实更好,因为这样做的话,成员变量连指向随机数据的机会都没有,而通过别的方式,出现指向随机数据的情形机会不可避免。注意到我们调用的self.VAR这样的语法,这表示我们正在用setter,而且不会引起任何内存问题。
在Objective-C中,你来对象在功能上等价于其他很多语言中的NULL指针。区别是可以对nil调用方法,而不致导致程序崩溃或抛出异常