在此演示代码下方,流程的逻辑并不重要。
@interface ViewController ()<UITableViewDataSource, UITableViewDelegate>
@end
static int channelIndex = 0;
static NSMutableArray *channelsDataArray = nil;
@implementation ViewController
- (void)getSomething {
// Append the desiredValuesDict dictionary to the following array.
if (!self.channelsDataArray) {
self.channelsDataArray = [[NSMutableArray alloc] initWithObjects: desiredValuesDict, nil];
} else {
[self.channelsDataArray addObject:desiredValuesDict];
NSLog(@"channelsDataArray : %@", self.channelsDataArray);
}
// This will print the result I expected.
NSLog(@"channelIndxBefore: %i", channelIndex);
++channelIndex;
NSLog(@"channelIndxAfter: %i", channelIndex);
}
@end
我的问题是,如果我以这种方式调用 channelIndex “self.channeIndex++”,它会出现警告:
Format specifies type 'int' but the argument has type 'NSInteger *'
(aka 'long *')
如果我将这种方式称为“channelIndex++”,它将正常工作。
奇怪的是,如果我只是调用的话,我还有另一个静态 NSMutableArray channelsDataArray
[self.channelsDataArray addObject:desiredValuesDict];
它将对象添加到 var 中会正常工作。但如果我只是使用
[channelsDataArray addObject:desiredValuesDict];
它不会显示任何警告,但 channelsDataArray 将为 nil,并且无法将 desiredValuesDict 分配给它。
问题:什么时候应该添加self前缀?为什么都是静态变量,一个要加self,另一个不用?
Best Answer-推荐答案 strong>
[原评论:]
错误提示您有另一个 @interface (在 .h 文件中)并且您在该文件中声明了一个与您在引用文件中声明的全局变量。您需要删除其中一个,这取决于您的需要。
HTH
关于ios - 访问器方式与静态 int 和静态 NSArray 不同,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/44754822/
|