본문 바로가기
[Effective Objective-C] #35 좀비를 이용해 메모리 관리 오류를 디버깅하라 [Effective Objective-C] #35 좀비를 이용해 메모리 관리 오류를 디버깅하라 출처 : Effective Objective-C -메모리 관리 오류를 디버깅하는 것은 매우 어려운 일이다.할당 해제된 객체에 메시지를 보내는 일은 예상할 수 있듯이 전혀 안전하지 못하다.그러나 때때로 그것은 동작하기도 하고 동작하지 않기도 하는데 이는 객체가 사용했던 메모리를 덮어 썼느냐에 달려있다.메모리가 재사용되었는지 알 수 있는 방법은 없다.그로 인해 크래시가 가끔 일어난다.메모리의 일부분만 재사용되는 경우도 있는데 이 때 객체의 일부분은 여전히 유효하다.또한 순전히 운으로 또 다른 유효한 살아 있는 객체가 메모리를 덮어쓸 수도 있다.이 경우 런타임은 새로운 객체에 메시지를 보낼 것이고 객체는 응답을 할 .. 2017. 9. 29.
[Effective Objective-C] #34 오토릴리스 풀을 사용하여 최고 메모리 사용량을 낮춰라 [Effective Objective-C] #34 오토릴리스 풀을 사용하여 최고 메모리 사용량을 낮춰라 출처 : Effective Objective-C -오브젝티브-C 의 Reference cout 아키텍처의 기능 중 하나는 오토릴리스 풀이다.객체를 릴리스한다는 것은 release 를 호출하여 객체의 리테인 수를 즉시 줄이거나 autorelease 를 호출해 객체를 오토릴리스 풀에 추가하는 것을 말한다.오토릴리스 풀은 미래의 특정 시점에 릴리스해야 할 객체의 집합으로 사용된다.풀이 마르면, 그 때 풀의 모든 객체에 release 메시지를 보낸다.@autoreleasepool { // ...} -객체에 autorelease 메시지를 보냈을 때 적절한 오토릴리스 풀이 없다면 콘솔(console)에서 다음과 .. 2017. 9. 28.
[Effective Objective-C] #15 접두어를 사용해 네임스페이스 충돌을 피하라 [Effective Objective-C] #15 접두어를 사용해 네임스페이스 충돌을 피하라 출처 : Effective Objective-C -오브젝티브-C 는 내장(built-in) 네임스페이스 기능이 없다.그렇기 때문에 일어날 가능성이 있는 충돌을 피하는 방법을 사용하지 않으면 이름은 쉽게 충돌한다.앱에서 이름이 충돌하면 중복 심벌 에러(duplicate symbol error)가 발생하여 링크(link)가 되지 않는다. -링크가 안 되는 것보다 더 좋지 않은 상황은 중복된 것을 포함한 라이브러리 중 하나가 실행 시간에 로딩되었을 때다.이 경우 동적 로더(dynamic loader)는 중복 심벌 에러와 마주치게 될 것이다.그리고 아마도 전체 앱이 다운될 것이다. -이 문제를 피하는 한 가지 방법은 간.. 2017. 8. 17.
반응형