성능 최적화 - autorelease 사용 문제
3236 단어 성능 최적화
대상의 방출을 지연시킬 수 있기 때문에 반드시 필요하지 않으면 autorelease 방출 대상을 사용하지 마십시오. iOS 프로그램에서 기본 메모리 방출 탱크의 방출은 프로그램이 끝나고 프로그램 입구main.m 파일 코드는 다음과 같습니다.
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
코드는 @autoreleasepool {...} 사이에 감싸여 있습니다. 이것은 풀의 작용 범위이며, 기본값은 전체 응용 프로그램입니다.대량의 대상이 autorelease로 방출되면 메모리 유출도 발생할 수 있습니다.그럼 언제 autorelease가 필수인가요?다음 코드를 살펴보겠습니다.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @”CellIdentifier”;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSUInteger row = [indexPath row];
NSDictionary *rowDict = [self.listTeams objectAtIndex:row];
cell.textLabel.text = [rowDict objectForKey:@"name"];
NSString *imagePath = [rowDict objectForKey:@"image"];
imagePath = [imagePath stringByAppendingString:@".png"];
cell.imageView.image = [UIImage imageNamed:imagePath];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
그 중cell 대상은 바로release가 될 수 없습니다. 테이블 보기 화면을 설정해야 합니다.autorelease는 일반적으로 다른 호출자에게 대상을 제공하는 방법에 적용되며, 대상은 이 방법에서 즉시release를 제공할 수 없으며, 방출을 지연시켜야 한다.
그 밖에 autorelease, 즉 앞에서 언급한'클래스 구조 방법'을 사용한 경우도 있다.
NSString *message = [NSString string WithFormat:@ ""%@ 팀을 선택했습니다."",rowValue];
이 대상의 소유권은 현재 호출자는 아니지만 iOS시스템이 autorelease 메시지를 보내서 풀에 넣는 것이다. 물론 이 모든 것은 개발자에게 보이지 않기 때문에 우리는 이런 문장의 사용을 줄이는 데 주의해야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SQLite 성능 최적화 사례 공유이전에 비교적 많은 데이터의 읽기와 쓰기를 접하지 못했기 때문에 성능 최적화에 대한 관심이 많지 않다. 이번에는 특정한 장면의 대부분이 대량의 읽기와 쓰기에 대해 성능 최적화를 하여 성능을 10배 향상시켰다. 매번 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.