2010-06-28 4 views
0
int someFunction (CLLocation *currentLocation) { 
    double latitude = 12.3f; 
    double longitude = 22.5f; 
    CLLocationDistance d1 = [currentLocation distanceFromLocation: 
    [[CLLocation alloc] initWithLatitude:latitude longitude:longitude]]; 
    return 0; 
} 

답변

1

예. 목표 - C의 메모리 관리는 복잡하게 보일 수 있지만 하나의 기본적인 규칙을 기억하는 것은 지금까지 당신을 데려 갈 것이다 : 당신은 이름이 "ALLOC"또는 "새로운"또는로 시작하는 방법을 사용하여 만드는 경우

당신은 객체의 소유권을 "copy"(예 : alloc, newObject 또는 mutableCopy)를 포함하거나 보관 메시지를 보내는 경우. 귀하는 릴리스 또는 자동 릴리스를 사용하여 소유하고있는 오브젝트의 소유권을 포기할 책임이 있습니다. 다른 어떤 시간에 물건을 받으면 그것을 풀어서는 안됩니다.

당신은 release 또는 autorelease없이 alloc 전화, 그래서 당신은 규칙을 깨고있다.

+0

감사합니다. @ "Fsfsdfsd"상수는 다르게 처리됩니까? – Jarsj

+0

문자열 상수에 대해 걱정할 필요가 없습니다. 당신은 그것들을'할당 '하지 않습니다 - 그들이 몇 번이나 유지되거나 해제되었는지에 상관없이 항상 거기에 있습니다. (그러나 언젠가 상수가 아닌 무언가를 넣을 경우에 사용하는'NSString' 변수로 옳은 일을하는 것이 여전히 좋은 생각입니다.) –

3

예. 두 번째 CLLocationdistanceFromLocation으로 전달하고 해제하지 않도록 할당하고 있습니다.

대신 할 수있는 :

CLLocationDistance d1 = [currentLocation distanceFromLocation: 
    [[[CLLocation alloc] initWithLatitude:latitude longitude:longitude] autorelease]]; 

(또는 여러 가지 다른 일을 @whisty이 코멘트에 제안대로 docs를 참조하십시오.).

(또한,이를 만들기 위해 조금 무의미한 것 같습니다 전화를 걸어 그 값을 d1에 할당하고 버리십시오.)

+0

메모리 관리에 대한 Apple의 문서도 읽어야합니다 (http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/). 20000994-BAJHFBGH –

2

예. CLLocation 객체를 할당하지만 결코 해제하지 마십시오. memory management guide을 통해 읽기를 강력히 권합니다.

관련 문제