Форум программистов, компьютерный форум CyberForum.ru

Есть ли здесь утечка памяти? - Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование iOS/iPhone Не происходит переход на следующий ListViewController по первому касанию http://www.cyberforum.ru/ios-dev/thread917911.html
Есть два класса - ClassViewController и CategoryViewController. Первый отображает список классов, а второй - категории для каждого класса. Чтобы знать, какой класс был нажат - в CategoryViewController передается имя класса, и по нему выбираются нужные категории. Но вот загвоздка: к примеру, если я тыкаю на "Класс 1", то ничего не происходит. Затем, когда я тыкаю второй раз - происходит переход на...
Программирование iOS/iPhone Использование XMPPFramework Собственно сабж. Возможно ли использовать в комерческих программах? И какие подводные камни? На закуску киньте тутотиалов. Нашёл только http://mobile.tutsplus.com/tutorials/iphone/building-a-jabber-client-for-ios-custom-chat-view-and-emoticons/ и собственно примеры с фреймворком. http://www.cyberforum.ru/ios-dev/thread917710.html
Программирование iOS/iPhone Регистрация А.Р. apple и Objective-C
Всем привет ребят, помогите пожалуйста с регистрацией аккаунта разработчика apple, я прошла регистрацию, но через 2 дня мне прислали на email, что неправильно ввела данные карты, потом снова регистрацию попросили пройти, ужас.. Ну и вопросы по коду хочу спросить, 1. Мне надо чтоб от числа в label, отнималось -1 (ну например от 20, станет = 19). 2. Чтоб при оплате, в label менялось число (это...
Создание приложения! IOS Программирование iOS/iPhone
Приложение. Функции : Ознакомление с ВУЗом База преподавателей с их. Непосредственными должностными функциями. Для, того чтоб перваки знали к кому идти. Списки мероприятий с описанием и точками сбора. И тд. Список "отделов" вуза, а именно : профком, деканаты, мат.помощь, военный стол, и тому подобное с их местом дислокации. Далее База старост всех групп, для того, чтобы новобранцы знали...
Программирование iOS/iPhone Timer http://www.cyberforum.ru/ios-dev/thread914017.html
Нужно чтобы в течение N секунд считывался и анализировался буффер. Но только N сек. Я так понимаю, что нужно использовать NSTimer. Не дадите ссылку или же привидите пример как это будет правильнее сделать. Спасибо
Программирование iOS/iPhone 2D editor for UML Доброго времени суток, как вы уже поняли, имеется нужда написать 2D editor for UML. Я поковырялся в гугле и поискал frameworks которые могли бы подойти на эту ролью, но информации и времени было не достаточно, чтобы детально рахобрать в каждом. Стандартно предлогают Open GL или Open GL SE, но может быть уже есть что нибудь заточеное именно для моих целей... Вот пример того как должно... подробнее

Показать сообщение отдельно
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
07.07.2013, 12:26     Есть ли здесь утечка памяти?
дополнительно на рассмотрение

1) код без утечек

Objective-C
1
2
3
4
5
6
7
8
9
10
    NSMutableString* s1 = [NSMutableString stringWithFormat:@"Hello"];
 
    for (int i = 0; i<100000; i++) {
        if (i<10) {
            NSLog(@"%@",s1);
        }
        [s1 appendString:@"Hello world"];
    }
    
    NSLog(@"count is %d ",[s1 retainCount]);
2) код с утечками

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
    NSMutableString* s1 = [NSMutableString new];
    
    
    
    for (int i = 0; i<100000; i++) {
        if (i<10) {
            NSLog(@"%@",s1);
        }
        [s1 appendString:@"Hello world"];
    }
    
    NSLog(@"count is %d ",[s1 retainCount]);
в обоих случаях счетчик показывает 1, => они должны утекать в обоих случаях, однако течет только в 2

идем дальше
3)

Objective-C
1
2
3
4
5
6
7
8
9
10
    NSMutableString* s1 = [[NSMutableString new] autorelease];
 
    for (int i = 0; i<100000; i++) {
        if (i<10) {
            NSLog(@"%@",s1);
        }
        [s1 appendString:@"Hello world"];
    }
    
    NSLog(@"count is %d ",[s1 retainCount]);
не течет, чтото мне подсказывает что в методе NSMutableString stringWithFormat уже по-умолчанию стоит autorelease

теперь проверим как ведет себя autorelease при принудительном уменьшении ссылки

4)

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
    NSMutableString* s1 = [[NSMutableString new] autorelease];
 
    for (int i = 0; i<100000; i++) {
        if (i<10) {
            NSLog(@"%@",s1);
        }
        [s1 appendString:@"Hello world"];
    }
    
    NSLog(@"count is %d ",[s1 retainCount]);
    
    [s1 release]; // << уменьшение ссылки
не получилось EXC_BAD_ACCESS

проверим как ведет себя "скрытый autorelease" в методе stringWithFormat, ведь мы не ожидаем что там он там прописан

5)

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
   NSMutableString* s1 = [NSMutableString stringWithFormat:@"Hello world"];
 
    for (int i = 0; i<100000; i++) {
        if (i<10) {
            NSLog(@"%@",s1);
        }
        [s1 appendString:@"Hello world"];
    }
    
    NSLog(@"count is %d ",[s1 retainCount]);
    
    [s1 release]; // << уменьшение ссылки
получилось

однако появилась странная надпись

test_ARC(690,0xac1cda28) malloc: *** error for object 0x753ad90: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
что как бы означает что релизить нельзя

чтобы разобраться в сабже идем в гугл и видим там

http://stackoverflow.com/questions/5...ringwithformat
You never release it. It's autoreleased already.

You only ever release objects which were given to you via methods whose names begin with +alloc, +new -copy, -mutableCopy, or -retain. If the name begins with anything else, you don't own it and are not responsible for releasing it.
что дословно означает: Если вы используете в конструкторе +alloc, +new -copy, -mutableCopy, or -retain тогда требуется релизить

------

Из этого можно сделать вывод, что без использования ARC, нужно во всех ваших классах писать конструкторы со словом init

например:

initWithData
initWithObject и прочее чтобы было видно что autorelease не используется.

---

я так гуглу походил, внятного ответа как распознать autorelease объект там нет.
=> только тестированием и использованием статических методов названием с init и прочими, которые указывали что autorelease не используется
 
Текущее время: 12:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru