В блоке 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