如何在块外部保持引用活动(ARC Enabled)?

时间:2013-11-10 11:23:03

标签: ios objective-c cocoa-touch automatic-ref-counting

我的问题是关于在完成处理程序块之外保持引用活动。 首先,请查看我的TableViewController:

@interface KMTweetTableViewController : 
UITableViewController

@property (weak) ACAccount      
 *selectedAccount;

@property  NSMutableArray  *tweetTextBank ;

@end

- (void)viewDidLoad KMTweetTableViewController方法中,我创建了一个名为SLRequest的{​​{1}}实例。事实证明,它负责为用户的时间线请求推特。

然后,我尝试从状态“text”属性创建一个数组。我使用这段代码来做到这一点:

userTimeLineRequest

[userTimeLineRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { dispatch_async(dispatch_get_main_queue(), ^{ NSArray *userTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:Nil]; int counter ; NSMutableArray *returner = [NSMutableArray alloc] ; for (counter= 1 ; counter <= userTimelineCountReference ; counter++) { NSDictionary *status = [userTimeline objectAtIndex: counter-1] ; NSString *tweetText = [status objectForKey:@"text"]; [self.tweetTextBank addObject:tweetText ]; } NSLog(@"%@" , self.tweetTextBank) ; }); }]; 块中的代码效果很好但是当dispath_async触发时,我只得到NSLog()。我认为这是因为null的引用在tweetText块的结尾处终止...那么在这种情况下我可以做什么来在启用ARC时保持该引用处于活动状态?

谢谢大家

2 个答案:

答案 0 :(得分:2)

由于您尚未初始化数组,因此您将获得null。首先,您需要初始化可变数组。

self.tweetTextBank=[NSMutableArray array];

答案 1 :(得分:2)

正确初始化mutablearray然后添加对象

self.tweetTextBank=[[NSMutableArray alloc]initWithCapacity:3];
[userTimeLineRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSArray *userTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:Nil];
            int counter ; 
            for (counter= 1 ; counter <= userTimelineCountReference ; counter++) {
                NSDictionary  *status = [userTimeline objectAtIndex: counter-1];
                NSString  *tweetText = [status objectForKey:@"text"];
                [self.tweetTextBank addObject:tweetText ];
            }
            NSLog(@"%@" , self.tweetTextBank) ;
        });

    }];