xil*_*il3 4 iphone objective-c
我注意到一些生成的类只通过@property声明了类属性/变量,并且不在@interface中包含它们,因为:
@interface AddItemViewController : UITableViewController {
}
@property (nonatomic, retain) UITextField *itemName;
Run Code Online (Sandbox Code Playgroud)
我只是好奇,如果这是一种可接受的方式,或者如果这是出于不同的原因?
我通常这样做:
@interface AddItemViewController : UITableViewController {
UITextField *itemName;
}
@property (nonatomic, retain) UITextField *itemName;
Run Code Online (Sandbox Code Playgroud)
我先在@interface中声明它,然后为它添加@property ......
*更新*
我只是想稍微更新一下,因为它对我来说仍然不是100%清楚.
我一直认为要声明一个@property,你首先需要先在@interface中声明它,然后我看到了这个:
@interface mInventoryAppDelegate : NSObject <UIApplicationDelegate> {
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@end
Run Code Online (Sandbox Code Playgroud)
所有这些@property声明都只声明为@properties,而不是@interface.
例如,如果我不得不说NSString *myString-我可以宣布,在@interface而不是作为一个@property,仍然可以访问它没有问题,但getter和setter将不会创建.我也可以在两者中声明它.但是,如果我只是将其声明为@property,那会怎样呢?
@interface AddItemViewController : UITableViewController {
}
@property (nonatomic, retain) NSString *myString;
Run Code Online (Sandbox Code Playgroud)
请注意我是如何在@interface {}之间添加它的 - 它是如何区别的.
很抱歉重复,但我只是想改写这个,以便我能得到一个对我更有意义的答案.
借助iPhone使用的"现代"运行时,编译器可以为您创建实例变量.只需使用:
@synthesize itemName;
Run Code Online (Sandbox Code Playgroud)
或者如果您愿意......
@synthesize itemName=_itemName;
Run Code Online (Sandbox Code Playgroud)
......在你的实施中.然后编译器将创建ivar'itemName'或'_itemName'.
这当然是针对一个特定实例变量的属性是简单的getter/setter的情况.
编辑:NVM,每个@bbum,我在脑海中想到的是"32位"sim实际上是旧的模拟器,它的行为与新的运行时不同.较新的模拟器仍然是32位,并支持此行为.请参阅下面的评论.
更新
回答您的更新问题:
类的"接口"是@end的所有内容.我认为你所谓的"接口"实际上只是{}中的实例变量.{}之间的内容是您的类的实例变量.整个@interface包括那些实例变量PLUS方法和{}和@end之间的@property声明.
所以我认为你真正要问的是你的@interface中是否有@property,并且@property只是一个简单的getter/setter对,那么你是否需要在@interface中声明一个"支持"实例变量,在{}内.
iPhone的答案是否定的.编译器(两者)可以为您创建该实例变量.
我希望能回答这个问题吗?
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |