<分区>
<分区>
1) 直接访问 iVar 是一个好方法吗?
2)以下哪种方法是最好的?
@interface Some
@property (nonatomic, strong) NSString *loginDataManager;
@end
@implementation Some
@synthesize loginDataManager = _loginDataManager;
@end
@interface Some {
NSString *loginDataManager;
}
@property (nonatomic, strong) NSString *loginDataManager;
@end
@implementation Some
@synthesize loginDataManager;
@end
最佳答案
在第一种情况下,编译器已经添加了默认的@synthesize var=_var;
,因此您可以省略它。这是Clang extension
Clang provides support for autosynthesis of declared properties. Using this feature, clang provides default synthesis of those properties not declared @dynamic and not having user provided backing getter and setter methods.
在第二种情况下,您使用的是 ivar 和同名的属性。这通常会输出编译器警告:
warning: Autosynthesized property 'loginDataManager' will use synthesized instance variable '_loginDataManager', not existing instance variable 'loginDataManager'.
但是,您添加了 @synthesize loginDataManager
以避免出现警告。
回答你的问题
更新
如果您使用 ARC(您应该),对象默认在其使用范围内保留为强。意思是,ARC会自动处理保留/释放,并且编写以下任何内容都没有区别:
@property(strong) NSObject *o;
__strong NSObject *o;
NSObject *o;
此外,无论您使用 self.o
、_o
或 o
访问,都没有区别。完全一样。
但是,如果您使用其他人的代码,并且该人在访问器方法中编写了其他内容,则您必须编写 self.o
才能运行该代码。因此,一般来说,在构造函数外部访问变量时,首选 self.ivar:
-(NSObject*) o {
/* ... some other code that needs to run when you access o */
return o;
}
如果您不使用 ARC,则需要编写 self.ivar 以便访问器正确保留和释放对象。最新 Xcode 创建的现代项目默认使用 ARC。
关于iphone - 在 Objective C 中直接访问 iVariable 是一个好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15612722/