相关疑难解决方法(0)

在dealloc中使用self.property = nil有什么问题吗?

我知道声明属性生成存取方法,这只是语法糖.

我发现self.property = nil他们的dealloc方法中有很多人使用它.

1)在Apple的内存管理文档中,p23它说:

您不应该使用访问器方法来设置实例变量的唯一地方是init方法和dealloc.

为什么不呢?

2)在Apple的Objective-C 2.0,p74中

声明的属性从根本上取代了访问器方法声明; 在合成属性时,编译器仅创建任何缺少的访问器方法.没有与dealloc 方法直接交互  - 不会自动为您释放属性.但是,声明的属性提供了一种交叉检查dealloc 方法实现的有用  方法:您可以在头文件中查找所有属性声明,并确保未标记的对象属性assign 被释放,并且标记的  对象属性不会  assign 被释放.

注意:通常在dealloc方法中,您应该release直接对象实例变量(而不是调用set访问器并nil作为参数传递),如下例所示:

- (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)

这个音符是什么意思?

我找到了[property release];并且[self setProperty:nil];都工作了.

null properties objective-c objective-c-runtime dealloc

9
推荐指数
1
解决办法
4037
查看次数

私有的@property是否创建了一个@private实例变量?

我已经读过,@synthesize它将自动创建相应的实例变量,@property@protected默认情况下 ivars .但是,如果我使用类扩展(如下所示)来指示@property方法是私有的呢?

// Photo.m
@interface Photo ()
@property (nonatomic, retain) NSMutableData *urlData;
@end
Run Code Online (Sandbox Code Playgroud)

相应的ivar会是@private吗?或者我应该明确地声明它是@private这样的吗?

// Photo.h
@interface Photo : Resource {
@private
    NSMutableData *urlData;
}
Run Code Online (Sandbox Code Playgroud)

properties private objective-c instance-variables

7
推荐指数
2
解决办法
2646
查看次数

Objective-C属性 - 使用[self myProperty]或self.myProperty比myProperty慢?

我正在使用Objective-C属性来处理保留/释放实例变量.在我的班上,我正在做这样的事情:

self.myProperty = somethingIWantToRetain
[self.myProperty doSomeAction]
[self.myProperty doSomethingElse]
Run Code Online (Sandbox Code Playgroud)

使用[self myProperty]/self.myProperty比简单地使用myProperty更慢,因为那些我没有改变myProperty值的行?例如,以下会更快吗?

self.myProperty = somethingIWantToRetain
[myProperty doSomeAction]
[myProperty doSomethingElse]
Run Code Online (Sandbox Code Playgroud)

谢谢

iphone properties objective-c

4
推荐指数
1
解决办法
271
查看次数