Pab*_*blo 5 objective-c ios4 ios
注意:通常在dealloc方法中,您应该直接释放对象实例变量(而不是调用set访问器并传递nilas参数),如下例所示:
- (void)dealloc {
[property release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
但是,如果使用现代运行时并合成实例变量,则无法直接访问实例变量,因此必须调用访问器方法:
- (void)dealloc {
[self setProperty:nil];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
iOS应用程序开发中的现代运行时到底是什么?
Jos*_*ell 10
可以使用与合成属性相同的名称直接访问ivar.该@synthesize指令代表您创建ivar(如果尚不存在),并且因为它是编译器指令,所以ivar在编译时可用.请参阅Objective-C编程语言的声明属性章节中的"运行时差异".正如Abizern在评论中指出的那样,也可以为ivar指定你喜欢的任何名字:@synthesize coffee=tea;- 这里tea是ivar和coffee财产.
要使用ivar,只需像任何其他变量一样引用它,而不使用点语法.以下是完全合法的,并按预期工作:
@interface Grisby : NSObject {}
@property (retain) NSObject * obj;
@end
@implementation Grisby
@synthesize obj;
- (void) dealloc {
[obj release], obj = nil;
[super dealloc];
}
- (id) init {
self = [super init];
if( !self ) return nil;
obj = [NSObject new];
return self;
}
- (NSObject *) obj {
return [[obj retain] autorelease];
}
@end
Run Code Online (Sandbox Code Playgroud)
Mac OS X 10.5(Leopard)引入了"现代运行时",作为向64位过渡的一部分.所有版本的iOS都使用现代运行时.合成的实例变量是现代运行时的一个特性,如上面提供的链接中所述.
Objective-C运行时编程指南的"运行时版本和平台"中提到的另一个关键区别是实例变量是"非易碎的".在ivar存储和访问中添加了一层间接,允许类添加变量而不影响派生类的存储.它也可能促进实例变量合成.格雷格帕克有一个涉及小猫的解释,在迈克阿什的2009年运行时写作中有传递参考,而在这里的巴伐利亚有关于伊娃存储和类扩展的膨胀帖.
在Objective-C运行时参考的"Mac OS X Version 10.5 Delta"一章中,您可以看到其他更改的内容,但没有说明 .