'코드블럭에러'에 해당되는 글 1건

  1. 2013.07.23 블럭코드에서의 ARC Retain Cycle Error 해결방법

iOS부터 가능해진 블럭코드 ^{}  (대충 이런형식의 처리로직?을 파라메터로 넘기는 방법) 에서 "ARC Retain Cycle Error " 라는 경고가 발생하는 경우가 있다.


Capturing 'self' strongly in this block is likely to lead to a retain cycle


ARC로 된 프로젝트에서 블럭코딩을 할 경우 블럭 밖에 선언된 변수가 블럭안에서 값이 변할때 위와같은 에러가 발생한다고 한다.

내자신도 블럭코드는 아직 지식이없어 자신있게 말할순 없지만...


어쨋든 해결방법은 문제의 변수를 __block 로 선언하면 경고가 사라진다.


만약 이런소스가 있다고 가정하면,

@implementation Hoge
-(void)hogeMethod{
  hogeHandler = ^(Fuga *fuga){
    [self someMethod:fuga];
  };
}
@end


이런식으로 변경.

@implementation Hoge
-(void)hogeMethod{
  // 여기서self를 카피
  __block Hoge *blockself = self;
  hogeHandler = ^(Fuga *fuga){
    [blockself someMethod:fuga];
  };
}
@end

Posted by 악당잰 트랙백 0 : 댓글 0

댓글을 달아 주세요