Блокът Objective-C използва силни променливи

искам да разбера коя функция е правилна и се надявам, че някои хора могат да ми дадат съвет между func1 и func2.

сега използвах 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]];
    }];
 }

person user994475    schedule 19.02.2013    source източник


Отговори (1)


func2 е добре. sortedArrayUsingComparator не съхранява блока за по-късна употреба или нещо подобно, така че няма проблем с цикли на запазване.

person newacct    schedule 19.02.2013
comment
Благодаря ви, това означава, че мога да използвам всяка променлива в този блок, например, мога да добавя нов обект в NameAndIdDictionary в блок. - person user994475; 20.02.2013
comment
или само sortedArrayUsingComparator този блок е наред, друг блок ще има проблем или проблем с циклите на запазване. - person user994475; 20.02.2013