我不熟悉既有属性变量又有实例变量的编程语言。
所以我不知道使用属性和实例变量的好方法。
现在,我只在Objective-C代码中使用属性,而不使用任何实例变量。
我需要使用实例变量吗?
或者只使用属性是Objective-C的最佳实践?
@interface ViewController : UIViewController
{
// instance variable
@public
int a;
}
// property
@property(nonatomic, strong) NSString *b;
@end发布于 2012-06-06 14:22:17
在任何地方使用属性。甚至不要声明实例变量,而是像这样合成它们:@synthesize myProperty = _myProperty,以便将它们与属性名区分开来。属性也是处理内存管理的好方法。唯一必须使用合成实例变量的地方是dealloc方法。
这些属性的优点很多:
取值方法定义如何获取和设置实例变量的值。取值方法您可以自定义取值方法(例如,延迟实例化
atomic/nonatomic声明属性attributesKVO,当使用properties发布于 2012-06-06 14:23:09
变量和属性之间的基本区别在于,您可以为属性赋予属性。你不能给变量赋予任何属性。因此,如果你希望有任何特定的行为,比如保留变量,原子地访问它,在类之外进行访问,你应该去寻找属性。
如果您只是想在类中使用访问变量,并且该变量没有附加任何特殊行为,则不需要通过属性访问它。你可以直接使用变量本身。这也将提高性能。
发布于 2012-06-06 14:39:47
与ivar相比,@property有一些优势:
strong/weak和retain/copy/assign). ),所以它将为您省去一些麻烦其他类的@property并在.m中对其执行@synthesize操作,则您的ivar将是公共的可读写的。您可以使用privat类扩展来防止这种情况。您甚至可以声明一个@property公共readonly,并通过privat类扩展在内部声明它们为readwrite。例如:A private property // [In the implementation file]
@interface MyClass ()
@property (nonatomic, retain) NSMutableArray* someData; // private!!
@end
@implementation MyClass @synthesize someData
@end@synthesize。你可以编写自定义逻辑到这样的getter和setter中,例如,你可以在一个KVO兼容changed.@property,你可以通过点符号访问getter和setter。 self.myIvar = (id) someThing;
[array addObject:self.myIvar];@property比写一个iVar @property你不需要在iVar中声明(在iOS和64位Mac应用程序中)。您可以通过@synthesize:完成此操作
@synthesize myiVar = _myIvar;https://stackoverflow.com/questions/10909039
复制相似问题