Правильно освободить ячейку из UITAbleView - PullRequest
2 голосов
/ 02 июня 2011

Я хотел бы знать, как правильно освободить ячейку и исправить утечку памяти, которая у меня есть.а также спросить, может ли утечка памяти вызвать сбой при прокрутке, если номера ячеек чисел становятся высокими?

Вот моя ячейка, из которой вытекает утечка из любых предложений?УТЕЧКИ исправлены !!!!Спасибо, но почему у меня происходит сбой при добавлении целого числа?

Есть предложения?

2011-06-01 18:24:55.663 ThemeCatcher[4641:207] *** Terminating app due to uncaught    
exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 16 
beyond bounds [0 .. 15]'
*** Call stack at first throw:
(
0   CoreFoundation                      0x014dcbe9 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x016315c2 objc_exception_throw + 47
2   CoreFoundation                      0x014d26e5 -[__NSArrayM objectAtIndex:] +  
261
3   ThemeCatcher                        0x00025833 -[TwitterVeiwController 
tableView:cellForRowAtIndexPath:] + 531
4   UIKit                               0x007bb7fa -
[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 634
5   UIKit                               0x007b177f -
[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
6   UIKit                               0x007c6450 -
[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
7   UIKit                               0x007be538 -[UITableView layoutSubviews] + 
242
8   QuartzCore                          0x00460451 -[CALayer layoutSublayers] + 181
9   QuartzCore                          0x0046017c CALayerLayoutIfNeeded + 220
10  QuartzCore                          0x0045937c 
_ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
11  QuartzCore                          0x004590d0 _ZN2CA11Transaction6commitEv +   
292
12  QuartzCore                          0x004897d5 
_ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
13  CoreFoundation                      0x014bdfbb 
__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
14  CoreFoundation                      0x014530e7 __CFRunLoopDoObservers + 295
15  CoreFoundation                      0x0141bbd7 __CFRunLoopRun + 1575
16  CoreFoundation                      0x0141b240 CFRunLoopRunSpecific + 208
17  CoreFoundation                      0x0141b161 CFRunLoopRunInMode + 97
18  GraphicsServices                    0x01efa268 GSEventRunModal + 217
19  GraphicsServices                    0x01efa32d GSEventRun + 115
20  UIKit                               0x0075642e UIApplicationMain + 1160
21  ThemeCatcher                        0x000021c9 main + 121
22  ThemeCatcher                        0x00002145 start + 53
23  ???                                 0x00000001 0x0 + 1

)

terminate called after throwing an instance of 'NSException'
Current language:  auto; currently objective-c
(gdb) 

Ответы [ 2 ]

0 голосов
/ 10 октября 2012

когда вы пишете приведенный ниже код в cellForRowAtIndex, просто автоматически высвобождайте его.Ваша проблема решена.

static NSString *cellIdentifier = @"cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if(cell == nil)
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellSeparatorStyleSingleLine reuseIdentifier:cellIdentifier] autorelease];
}
0 голосов
/ 02 июня 2011
  1. cell объект должен быть автоматически освобожден здесь - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];, и эта строка должна быть внутри if ( cell == nil ) { //here }.
  2. Вы выделяете init tableImage, но не освобождаете его.
  3. selectedCell также не освобождается.
  4. Вы autorelease возвращаетесь после выхода из метода.Этого не произойдет, и в случае использования повторно используемой ячейки будет отправлено дополнительное сообщение release о сбое в вашем приложении.

Кажется, в ваших комментариях есть и другие проблемы, которые я решил не включать.Попробуйте использовать приложение Leaks для проверки утечек памяти.

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