편집 : 좋아, 그래서 원래의 문제를 해결하는 방법을 알아 냈습니다,하지만 이것이 최선의 방법인지 모르겠습니다./경우 UITableViewCell에서 속성을 해제하려면
@property (nonatomic, retain) IBOutlet UILabel *levelLabel;
이는 IB에 연결 :
나의 새로운 질문은, 내가 헤더에 다음과 같은 속성 선언에있는 UITableViewCell의 하위 클래스를 말한다. dealloc에서 이것을 공개하지 않고 전혀 해제하지 않습니까? 이것은 exc_bad_access 오류를주지 않고도 작동하도록 알아낼 수있는 유일한 방법입니다. 이전에는 tableviewcell이 화면을 벗어 났지만 dealloc을 호출했지만 여전히 필요했습니다. 어디에서 물건을 풀어 주나요, 아니면 제가 그걸 처리합니까?
원래 제목 : UITableView 및 exc_bad_access의 메모리 누수 좋아, 혼란스러워. 나는이 튜토리얼 온라인과 함께 맞춤 UITableViewCells를 만들고 있었다. 나는 하나를 만들었고, 튜토리얼이 말한 것처럼 모든 것을했습니다. 내 UITableViewCell 하위 클래스에는 3 개의 UILabels 및 3 개의 UIButton이 포함되어 있으며 모두 속성으로 정의되어 있고 IB로 연결되어 있습니다. 단추를 눌렀을 때를 알 필요가 있고 텍스트를 변경할 수 있어야하기 때문에 클래스에 사용할 수있게해야합니다. 앱을 실행하면 스크롤이 시작되고 몇 초 후 exc_bad_access가 메인 (콘솔에 출력되지 않음)에서 충돌합니다. 하지만 NSZombieEnabled가 설치된 기기에서 앱을 실행할 때 충돌이 전혀 발생하지 않고 잘 돌아갑니다. 그러나 악기는 할당을 보여주기 때문에 특히 스크롤 할 때 매우 빨리 올라갈 수 있습니다. 나는 이것이 전부 할당인지 또는 이들이 공개되는지는 알지 못하지만 여전히 너무 빨라 보인다. 여기
는 PointCoordinatesCell.h (내 사용자 지정 셀)입니다 :#import <UIKit/UIKit.h>
@interface PointCoordinatesCell : UITableViewCell
@property (nonatomic, retain) IBOutlet UILabel *levelLabelLabel;
@property (nonatomic, retain) IBOutlet UILabel *levelLabel;
@property (nonatomic, retain) IBOutlet UILabel *levelDescriptionLabel;
@property (nonatomic, retain) IBOutlet UIButton *beginningButton;
@property (nonatomic, retain) IBOutlet UIButton *developingButton;
@property (nonatomic, retain) IBOutlet UIButton *secureButton;
@end
PointCoordinatesCell.m :
#import "PointCoordinatesCell.h"
@implementation PointCoordinatesCell
@synthesize levelLabel, levelLabelLabel, levelDescriptionLabel, beginningButton, developingButton, secureButton;
- (void)dealloc{
[super dealloc];
[levelLabel release];
[levelLabelLabel release];
[levelDescriptionLabel release];
[beginningButton release];
[developingButton release];
[secureButton release];
}
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end
RootViewController.h는 클래스 선언 및 표준 수입 이외의 그것에는 아무 상관이 없습니다. 정의 된 변수 또는 메소드가 없습니다. UITableViewController 하위 클래스입니다.
RootViewController.m : 라벨을 공개하지에
#import "RootViewController.h"
#import "StatesAppDelegate.h"
#import "PointCoordinatesCell.h"
@implementation RootViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}
#pragma mark Table view methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 50;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
return 293;
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"PointCoordinatesCell";
PointCoordinatesCell *cell = (PointCoordinatesCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"PointCoordinatesCell" owner:self options:nil];
for (id currentObject in topLevelObjects){
if ([currentObject isKindOfClass:[UITableViewCell class]]){
cell = (PointCoordinatesCell *) currentObject;
break;
}
}
}
//cell.capitalLabel.text = [capitals objectAtIndex:indexPath.row];
//cell.stateLabel.text = [states objectAtIndex:indexPath.row];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic may go here. Create and push another view controller.
// AnotherViewController *anotherViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherView" bundle:nil];
// [self.navigationController pushViewController:anotherViewController];
// [anotherViewController release];
}
- (void)dealloc {
[super dealloc];
}
@end
그는 최대한 멀리 볼 수 dealloc''에서 라벨을 출시 할 예정이다 .... – Mundi