我知道如果我使用
@interface TPN : UIViewController{
IBOutlet UIView *testView;
}
@property (strong, nonatomic) IBOutlet UIView *testView;
我知道第一个本质上是一个私有变量,只能在类中访问。第二个“@property”可以从实例化对象访问。我觉得奇怪的是,在大多数教程中,人们通常在更改类本身的插座时往往会设置属性。有什么我应该遵循的指导方针吗?
我知道如果我使用
@interface TPN : UIViewController{
IBOutlet UIView *testView;
}
@property (strong, nonatomic) IBOutlet UIView *testView;
我知道第一个本质上是一个私有变量,只能在类中访问。第二个“@property”可以从实例化对象访问。我觉得奇怪的是,在大多数教程中,人们通常在更改类本身的插座时往往会设置属性。有什么我应该遵循的指导方针吗?
您根本不再需要指定 ivar。也不需要使用@synthesize。
使用属性,但要确保它是弱的,而不是强的
@interface TPN : UIViewController
@property (weak, nonatomic) IBOutlet UIView *testView;
在实现中,您现在可以将 ivar 作为 _testView 访问。
对于私有属性(上面是公共的),请将@property 放在实现文件中的一个类别中:
#import "TPN.h"
@interface TPN ()
@property (weak, nonatomic) IBOutlet UIView *testView;
@end
@implementation TPN
....
你说的对。如果您只打算在类中使用实例变量,那么将其设为属性是没有意义的。一个属性仅仅意味着一对getter/setter。如果获取/设置时不需要特别做任何事情,直接使用实例变量即可。
在 ARC 之前,在任何地方使用属性都有一个附带好处,因为它更容易对对象指针进行内存管理——声明为的属性retain
会在您设置它时自动为您释放和保留,而无需您自己键入该代码您将不得不直接处理实例变量。但是,现在在 ARC 中,编译器无论如何都会在您分配时为您执行此操作,如果它是一个强实例变量。所以这个好处现在是无关紧要的。
我怀疑人们将属性用于插座的很多原因是因为在几乎所有教程和示例中一直使用这种用法(可能是由于之前保留内存管理的好处),而他们根本没有意识到他们可以做到有些不同。