2012-11-05 2 views
3

블록을 반환하는 클래스 함수가 ​​있으면 블록의 메모리 관리 측면에서 어떤 작업을 수행해야합니까?함수에서 반환 된 블록의 메모리 관리

typedef BOOL (^Block)(ParamType* param); 


+ (Block) makeBlock: (SeedParamType* seed) 
{ 
    return ^BOOL (ParamType* param) 
    { 
     // do something with seed 
     return someBoolVal; 
    }; 
} 


@interface SomeClass() 
@property (copy, nonatomic) Block     theBlock; 
@end 

메모리 관리 측면에서 명시 적으로해야 할 사항이 있습니까, 아니면 ARC가이 모든 상황을 처리합니까? 수동 가정

감사

답변

2

ARC를 사용하면 문제가 없습니다. 정보를 관리하는 방법을 알기에 충분한 정보가 있습니다.

구문은해야하지만 조금 잘못된 것입니다 :

+ (Block) makeBlock: (SeedParamType*) seed 
{ 
    return ^BOOL (ParamType* param) 
    { 
     // do something with seed 
     return someBoolVal; 
    }; 
} 
+0

구문과 내 차이점이 있습니까? – Gruntcakes

+0

'+ (Block) makeBlock : (SeedParamType *) seed', 닫는 괄호가 잘못된 위치에 있습니다. – WDUK

2

는/릴리스를 유지, 그 코드가 유효하지 않습니다. 블록 복사본을 반환해야합니다. 다음 작업을 수행 할 수도 있습니다.

+ (Block) makeBlock: (SeedParamType* seed) 
{ 
    return [[^BOOL (ParamType* param) 
    { 
     // do something with seed 
     return someBoolVal; 
    } copy] autorelease]; 
} 
+0

감사합니다 "가정 설명서/릴리스를 유지"하지만로서 내가 ARC를 사용하고 있습니다 언급했다. – Gruntcakes

관련 문제