Mix C и Objective-C Управление памятью - PullRequest
0 голосов
/ 01 ноября 2018

1. Учитывая следующий код:

void make_objc_array()
{
    NSArray *array = [NSArray arrayWithObjects:@1, @2, nil];
    NSLog(@"%@", array.lastObject);
}

void make_objc_dictionary()
{
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@1, @"1", @2, @"2", nil];
    NSLog(@"%@", dictionary[@"2"]);
}

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        make_objc_array();
    }
    make_objc_dictionary();
    return 0;
}

Не вызывает ли make_objc_dictionary(); вызов функции утечки NSDictionary объекта, поскольку он находится вне блока @autorelease?

2. Рассмотрим этот фрагмент кода:

- (void)someMethod
{
    NSNumber *num[2] = {@1, @2};
    ...
}

Для управления памятью, что мне нужно сделать для массива NSObject C, или ARC сделает правильные вещи? Или в любом случае ARC не будет работать при смешивании C и Objective-C?

1 Ответ

0 голосов
/ 01 ноября 2018

«[M] ixing C и Objective-C» ничем не отличается от программирования в Objective-C. Objective-C включает C. Ни в одном из ваших фрагментов кода нет ничего, кроме Objective-C.

ARC сделает правильные вещи в ваших примерах. ARC не управляет большей частью не-объектного выделения памяти. Он не управляет CoreFoundation. Это не менеджер malloc() и подобные функции.

Другой случай, когда ARC не может помочь, это если вы создаете сильные эталонные циклы.

Наконец, программы не теряют память «навсегда», то есть после выхода. Если ваша программа собирается завершить работу, например, return из main(), вам не нужно беспокоиться о выделенной памяти, поскольку она будет возвращена операционной системой после ее завершения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...