#import "AppDelegate.h"
@interface AppDelegate ()
@property (strong, readwrite, nonatomic) NSNumber *currentNumber;
@end
@implementation AppDelegate
- (NSNumber *)currentNumber {
}
- (void)setCurrentNumber:(NSNumber *)currentNumber {
}
答案 0 :(得分:2)
@property
不会导致ivar生成;相反,它是隐含的@synthesize
。但是,当你同时实现getter和setter时,没有什么可以(隐式地)合成,所以clang不会打扰。如果您添加明确的@synthesize
语句,则会获得您的ivar。
答案 1 :(得分:1)
与提及的 Avi 一样,有@synthesize
个关键字。如果你只声明属性(没有为它实现getter和setter),将生成相应的ivar。它的名称将是[下划线] [property_name]。例如,声明@property currentNumber;
会导致隐式应用`@synthesize currentNumber = _currentNumber;
但是如果你想为你的财产分配另一个名称的ivar,你可以声明这个ivar并用它合成该属性:
@interface AppDelegate ()
{
NSNumber *_anotherIvar;
}
@property (strong, readwrite, nonatomic) NSNumber *currentNumber;
@end
@implementation AppDelegate
@synthesize currentNumber = _anotherIvar;
@end
@synthesize告诉编译器创建相应的getter和setter,它们在赋值的右侧由ivar支持。如果你提供自己的setter - 你阻止编译器创建隐式合成(并生成ivar),所以你需要自己提供ivar(例如使用显式合成)。
Here是关于@synthesize的好解释。