Xcode警告“未使用的属性访问结果 – 吸气剂不应该用于副作用”
当我打电话给本地程序时,我得到这个警告。
我的代码是这样的:
-(void)nextLetter { // NSLog(@"%s", __FUNCTION__); currentLetter ++; if(currentLetter > (letters.count - 1)) { currentLetter = 0; } self.fetchLetter; }
我得到了self.fetchLetter语句的警告。
那个例程看起来像这样:
- (void)fetchLetter { // NSLog(@"%s", __FUNCTION__); NSString *wantedLetter = [[letters objectAtIndex: currentLetter] objectForKey: @"langLetter"]; NSString *wantedUpperCase = [[letters objectAtIndex: currentLetter] objectForKey: @"upperCase"]; ..... }
我宁愿修复警告消息,有没有更好的方式来写这个?
谢谢!
点符号(即self.fetchLetter
)是用于属性,而不是任意的方法。 self.fetchLetter
被解释为“获取”self“的”fetchLetter“属性,”这不是你想要的。
只需使用[self fetchLetter]
。
在较新的Xcode版本中,甚至是[object method];
可能会触发警告。 但有时我们实际上需要调用一个属性并放弃结果,例如在处理视图控制器时,我们需要确保视图实际上被加载。
所以我们在做:
// Ensure view is loaded and all outlets are connected. [self view];
这现在也触发了“未使用的财产访问结果 – 吸气剂不应该用于副作用”的警告。 解决的方法是让编译器知道这是通过将结果types转换为void来有意识地完成的:
(void)[self view];
你使用这样的语法声明fetchLetter?
@property (retain) id fetchLetter;
这看起来不对,你在做什么。 属性的目的是作为variables访问器(在getter的情况下)没有任何副作用。
您应该将fetchLetter声明为一个方法,如下所示:
- (void) fetchLetter;
并使用它来访问它:
[self fetchLetter]
我刚刚解决了我的问题,在我的情况下CoreLocation项目,同时使用汤姆和克里斯的答案 –
我宣布:
@property (strong, nonatomic)CLLocationManager *locationManager;
并执行如下:
@synthesize locationManager = _locationManager; .... - (void) dealloc { [self locationManager]; }