OStack程序员社区-中国程序员成长平台

标题: ios - 访问器方式与静态 int 和静态 NSArray 不同 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 01:52
标题: ios - 访问器方式与静态 int 和静态 NSArray 不同

在此演示代码下方,流程的逻辑并不重要。

@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-推荐答案


[原评论:]

错误提示您有另一个 @interface(在 .h 文件中)并且您在该文件中声明了一个与您在引用文件中声明的全局变量。您需要删除其中一个,这取决于您的需要。

HTH

关于ios - 访问器方式与静态 int 和静态 NSArray 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44754822/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4