0

Accessing the dictionary allData after completion of NSInvocationOperation triggers a retain cycle warning:

operationQueue = [[NSOperationQueue alloc]init];
invocationOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadDataAsychn) object:nil];
[operationQueue addOperation:invocationOperation];

invocationOperation.completionBlock = ^(void) {
     for(NSDictionary  *dict in allData)
      { 
        [imgArr addObject:[dict objectForKey:@"image"]];
        [urlArr addObject:[dict objectForKey:@"url"]];
      }
         dispatch_async(dispatch_get_main_queue(), ^{

         [NSTimer scheduledTimerWithTimeInterval:5.0 
                                          target:self 
                                        selector:@selector(targetMethod:) 
                                        userInfo:imgArr 
                                         repeats:YES]; 
    });
};

-(void)loadDataAsychn
{
    NSString *imgStr = [NSString stringWithFormat:@"%@/url",urlconstant];

    NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imgStr]];
        allData = [NSJSONSerialization JSONObjectWithData:imageData 
                                                  options:0
                                                    error:nil];
}
SwiftArchitect
  • 47,376
  • 28
  • 140
  • 179
user2799156
  • 367
  • 2
  • 3
  • 10
  • 2
    have a look at this http://stackoverflow.com/questions/7205128/fix-warning-capturing-an-object-strongly-in-this-block-is-likely-to-lead-to-a and this http://stackoverflow.com/questions/13361655/block-and-retain-cycle-cant-catch-it – Dinesh Dec 06 '13 at 07:50
  • 1
    Also rethink your design - that timer in the dispatch block is a terrible idea. – David H Dec 06 '13 at 13:15
  • Actually I am a beginner will you please explain why this is terrible idea. – user2799156 Dec 09 '13 at 04:36

0 Answers0