2014-01-20 1 views
-1

안녕하세요. ARC를 사용하여 메모리 할당 해제에 대한 많은 예를 읽었습니다. 그들은 nill ARC에 대한 포인터를 할당 해제하면 포인터를 설정하면 일부 자습서에서 문제를 잘 설명합니다. 어쩌면에 대한 ... 도와주세요ARC 메모리 릴리스가 작동하지 않습니다.

while(1) 
{ 
    NSDate *now = [NSDate date]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateStyle:NSDateFormatterShortStyle]; 
    [formatter setTimeStyle:NSDateFormatterShortStyle]; 
    [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Sydney"]]; 
    NSString *tmp =[formatter stringFromDate:now]; 
    lol = [tmp copy]; 
    tmp = nil; 
    now = nil; 
    formatter = nil; 
    lol = nil; 
} 
여전히 메모리의 크기가 증가

... :하지만 내 프로그램에서이 여전히

시험을 다음 행으로 구성됩니다 .... 작동하지 않습니다 thi thngs 내가 ARC를 해제해야합니다 ...

+3

메모리가 커지는 것을 어떻게 알 수 있습니까? – erdekhayser

+2

나는 똑같은 질문을하려고했는데, 더 구체적으로 말하자면,이 코드 블록이 누수가있는 곳이라고 믿게 만들었습니까? – StilesCrisis

+0

죄송합니다. while 루프를 잊어 버렸습니다. –

답변

2

아크 꽉 데이터를 수 있도록 autorelease를 할 수 있습니다 루프 (runloop가 진행되지 않고 autoreleasepool이 소모되지 않는 동안 사용한다고 가정).

루프 안에 명시적인 @autoreleasepool 넣기

+0

고마워 그것이 작동;),하지만 두 스레드와 그들 사이에 전달할 클래스의 배열이 있다면 어떻게해야합니까? 내가 수업을 어떻게 풀어 줘? –

+0

개체에 실제로 액세스하는 스레드가없는 경우 개체가 해제됩니다. –

3

당신이 그 코드와 함께 일을하려고하는지 명확하지 않다하지만이 같은 @autorelease 블록 내부의 모든 것을 감싸 준다면 그것은 당신을 도울 것입니다 :

@autorelease { 
    NSDate *now = [NSDate date]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateStyle:NSDateFormatterShortStyle]; 
    [formatter setTimeStyle:NSDateFormatterShortStyle]; 
    [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Sydney"]]; 
    NSString *tmp =[formatter stringFromDate:now]; 
    lol = [tmp copy]; 
    tmp = nil; 
    now = nil; 
    formatter = nil; 
    lol = nil; 
} 
+1

@autoreleae가 존재하지 않습니다 ... –

+0

글쎄, 잘못 입력 했으니'@ autorelease'가 아니라'@ autoreleae'입니다. – arturgrigor