URL에서 가져온 이미지의 축소판이 포함 된 tableview에 대한 순진한 코드 (동기식 호출이라는 의미에서)를 작성했습니다. 이미지를 끌어 cellForRowAtIndexPath의 코드는 다음과 같이 진행됩니다이미지 축소판을로드하는 중 문제가 발생했습니다.
data = (data == nil)? [[NSData alloc] initWithContentsOfURL:photoThumbPage] : [data initWithContentsOfURL:photoThumbPage];
thumbImg = (thumbImg == nil)? [[UIImage alloc] initWithData:data] : [thumbImg initWithData:data];
나는 새로운있는 NSData하고있는 UIImage마다 할당하지와 속도 향상이있을 수 있다고 생각, 그래서 난 내 클래스를 정의했다. 미리보기 이미지를 얻을 때마다 정의되어 있는지 확인하고, 이미있는 경우 다른 값으로 다시 초기화합니다.
나는이 문제를 여기에 쓰면서 모든 종류의 나쁜 일이 발생했다고 생각할 수 있습니다. :) 내 tableview를 스크롤 할 때 가끔씩 두 개 이상의 항목이 같은 이미지를 공유 할 수 있습니다. 내 애플 리케이션을 충돌하지 않는 콘솔,하지만 내 jpeg 파일이 손상되었습니다 말해줘.
이러한 요청은 모두 비동기 적이어야하며 실제로 이러한 결과를 캐싱해야한다는 사실을 제쳐두고 아무도 내가 걸려 넘어 질 수 있다고 말할 수 있습니까? cellForRowAtIndexPath가 표시되는 각 셀에 대해 호출되고 내 코드가 동기이면 nsdata 및 uiimage 변수가 호출을 통해 유지되어야하는 이유가 없어야합니다 (init 메소드로 지워지는 것 같습니다). 이 멤버 변수를 바꿔서 매번 초기화했습니다.
NSData *data_local = [[NSData alloc] initWithContentsOfURL:photoThumbPage];
UIImage *thumbImg_local = [[UIImage alloc] initWithData:data];
그리고 잘 작동합니다. 축소판을로드 할 때마다 새 NSData 및 UIImage를 할당하는 대신 재사용 가능한 멤버 변수를 할당 할 때 어떤 이점이 있습니까? 아니면 그냥 재앙을위한 처방인가? 모든 의견/도움에 감사드립니다.
감사합니다. 그것은 많은 의미가 있습니다. – Ying