2
在此演示代碼下面,過程的邏輯並不重要。訪問器方式與靜態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 ++」就會出來一個警告:
格式指定類型「詮釋」,但參數的類型爲'NSInteger *' (aka'long *')
如果我以這種方式調用「channelIndex ++」,它將正常工作。
奇怪的是,我還有一個靜態的NSMutableArray channelsDataArray,如果我只是叫
[self.channelsDataArray addObject:desiredValuesDict];
它將正常工作對象添加到變種。但是,如果我只是用
[channelsDataArray addObject:desiredValuesDict];
它不會顯示任何警告,但channelsDataArray將是零,而不能desiredValuesDict分配到它。
問題:我應該何時添加自我前綴?爲什麼他們都是靜態變量,但一個人必須增加自我,另一個不?
我猜你有另一個'@ interface'(在'.h'文件)。閱讀,所有應該變得明顯。如果不查找實例和全局變量之間的差異。如果在編輯問題後仍然卡住其他界面,並且有人會毫無疑問地幫助你。當然,如果沒有另一個界面,我的猜測是錯誤的... – CRD
@CRD你是完全正確的!我確實在.h文件中聲明瞭channelDataArray聲明,並在interface()和implementation之間聲明瞭channelDataArray。這是c類型的全局變量。非常感謝你,你可以在我的問題下面發表你的答案,我會讓你高興! –