.h文件内容
@interface XYZAppDelegate : NSObject <UIApplicationDelegate> {
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet XYZViewController *viewController;
@end
.m文件内容
#import "XYZAppDelegate.h"
#import "XYZViewController.h"
@implementation XYZAppDelegate
@synthesize window=_window;
@synthesize viewController=_viewController;
我的问题/查询如下。
答案 0 :(得分:4)
答案 1 :(得分:4)
1)如果我们放置属性,我们不需要声明变量吗? (使用属性,我们可以间接声明变量 - 是这样的吗?)
没有。您不需要为相应的属性声明变量。您需要使用@synthesize propertyName
命令告诉编译器为您创建这些变量。
2)为什么每个人都坚持在每个属性访问者之前使用_
? (除了安全威胁?它是否已成为编码标准?背后的原因是什么?)
大多数人(全部?)都受到记忆管理噩梦的骚扰。其中一些是由草率/懒惰/零睡眠编码引起的。使用@synthesize propertyName = _propertyName
允许程序员立即知道下划线变量对类是私有的,并且是未保留的。它可以防止您专门分配或复制要存储在属性中的对象的问题,或者意外地将自动释放的对象分配给ivar。
考虑:
1)将自动释放的对象分配给未保留的ivar。
@synthesize propertyName;
propertyName = [NSString stringWithFormat:@"I've just made %@", "a boo-boo."];
“propertyName”现在引用一个很快就不存在的对象,这将在未来的路上创建EXEC_BAD_ACCESS错误(只要再次引用它)。
2)保留的对象被设置为保留属性。
@synthesize propertyName;
self.propertyName = [[NSString alloc] initWithFormat:@"I just created %@", @"a leak"]
现在我们已经创建了一个NSString
对象,并将其设置为propertyName
属性,该属性本身保留变量。现在该对象被双重保留,无法正确释放。
当您使用下划线正确命名您的ivars时,这两个问题都很容易打击(即使很累,尽管不那么)。这不是一种万无一失的方法,但它可以更容易地管理你脑中物体的保留数量。
答案 2 :(得分:2)
(1)不,不是新的64位功能。变量会自动为您声明。
(2)我不知道你在这里问的是什么。
(3)这只是一个约定,因此变量名称与访问者名称不同。使你处理的更清楚。