2013-02-19 27 views
0

我想了解哪個函數是正確的,並希望有些人可以給我func1和func2之間的建議。Objective-C塊使用強變量

現在我用了func1,有人告訴我func2有內存問題。

@property (nonatomic) NSDictionary *NameAndIdDictionary; 
- (void) func1 
{ 
    __weak NSDictionary *NameAndIdDictionary = self.NameAndIdDictionary; 
    self.Keys = [[NameAndIdDictionary allKeys] sortedArrayUsingComparator: ^NSComparisonResult(id obj1, id obj2) { 
     NSString *name1 = (NSString *)NameAndIdDictionary[obj1]; 
     NSString *name2 = (NSString *)NameAndIdDictionary[obj2]; 
     return [[name1 uppercaseString] compare:[name2 uppercaseString]]; 
    }]; 
} 


- (void) func2 
{ 
    self.Keys = [[self.NameAndIdDictionary allKeys] sortedArrayUsingComparator: ^NSComparisonResult(id obj1, id obj2) { 
     NSString *name1 = (NSString *)self.NameAndIdDictionary[obj1]; 
     NSString *name2 = (NSString *)self.NameAndIdDictionary[obj2]; 
     return [[name1 uppercaseString] compare:[name2 uppercaseString]]; 
    }]; 
} 

回答

1

func2很好。 sortedArrayUsingComparator不存儲該塊供以後使用或類似的東西,所以沒有保留週期的問題。

+0

謝謝,這意味着我可以在此塊中使用任何變量,例如,我可以在塊中的NameAndIdDictionary中添加新對象。 – user994475 2013-02-20 16:21:09

+0

或者只有sortedArrayUsingComparator這個塊沒有問題,另一個塊會有問題或者保留週期問題。 – user994475 2013-02-20 16:22:28