我在for循环中添加了多个NSOperation子类的实例:
NSMutableArray * operations = [[NSMutableArray alloc]initWithCapacity:0];
for(int i =1; i<81;i++){
[operations addObject:[[PDFGenerator alloc]initWithPageNumber:i andPDFParser:pdf]];
}
[_queue addOperations:operations waitUntilFinished: NO];
PDFGenerator中的我有一个变量,用于存储操作的当前页码。
@implementation PDFGenerator
int pageCounter;
在PDFGenerator的主要方法中,我正在记录当前页码并打印 80为所有操作!
我已经使用@property修复当前页数, 但我试图理解为什么会这样。有任何想法吗? 谢谢!
答案 0 :(得分:1)
当您使用时:
int pageCounter;
您正在创建一个全局变量。假设您在每次迭代时设置此项,然后在PDFGenerator方法中引用它,它将始终使用它设置的最后一个值。
示例:
// Bar.h
@interface Bar : NSObject
FOUNDATION_EXPORT int someThing;
@end
// Bar.m
@implementation Bar
int someThing;
@end
// Foo.m
#import "Foo.h"
#import "Bar.h"
@implementation Foo
- (void)doSomething
{
++someThing;
}
@end
这是完全有效的代码,并且调用[Foo doSomething]
增加someThing
。
如果你想要一个实例变量,它将如下所示:
@interface Bar()
{
int someThing;
}
@end
@implementation Bar
- (void)doSomething
{
++someThing;
}
@end
在这种情况下,someThing
被定义为实例变量(不是全局变量)。它是Bar
的对象的可访问部分。