[ios] method naming guide

액션 이름 짓기

link : http://stackoverflow.com/questions/7222013/naming-conventions-on-ibaction-functions

1. prefix를 사용하지 말아라

2. 액션 이름은 동사로 시작한다.

3. do, dose와 같은 이름을 사용하지 말아라, 그 이유는 조동사는 의미가 없기 때문이다.

4. 그리고 부사(adverbs), 형용사(adjective)를 동사 전에 사용하지 말아라.

5. 만약 값을 반환하는 함수라면 get이라는 이름이 필요하지 않다. 값을 반환하는 이름을 바로 사용해라.

– (NSSize)cellSize;

6. 키워드를 적절히 활용 해라.
– (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag

-> 아름다운 문장이다….그러나 Objective-C ….swift가 어느면에서는 더 좋은점이 있다(안좋은 점도 있다…IPC 메시지 전송이 안된다고 했던 기억이…)

7. Argument가 오기 전에 argument를 표현 할 수 있도록 메서드 네이밍을 작성한다.

– (id)viewWithTag:(int)aTag;

코딩 가이드 라인

(결국 Apple 문서를 읽어라 인데…apple  문서는 너무나 길다 ㅋㅋ)

http://stackoverflow.com/questions/8410602/objective-c-method-naming-convention

구글 코딩 스타일

http://google-styleguide.googlecode.com/svn/trunk/objcguide.xml

[Memory] thrashing

thrashing :
메모리 할당 -> 원하는 크기의 메모리 block이 없음 -> Memory 부족으로 -> Page Fault가 빈번하게 일어나는 상태(LRU alg로 오래된 page 추방)

원인 : 메모리 부족 -> system call로 조그만한 메모리 block 할당 -> 메모리 단편화(fragmentation) 발생 -> 단편화 조각보다 큰 메모리를 요청한 경우 메모리 부족으로 page fault 발생 -> 잦은 I/O -> CPU자원을 활용하기 어려움.

해결방법 : RAM Size UP, Block 단위의 메모리 공간 할당, 사용, 반납

VM기반의 Java보다는 system call을 사용하는 C++에서 이런 현상이 자주 발생한다고 한다.
http://stackoverflow.com/questions/60871/how-to-solve-memory-fragmentation

문제를 겪고 있는 프로그래머가 3가지 방법 중 가장 좋은 대안을 물어보았다.

1) Use Windows Low-fragmentation Heap

2) jemalloc – as used in Firefox 3

3) Doug Lea’s malloc

본문 내용의 일부를 발췌하여 요약하면
-> 비슷한 life time을 가진 동적 메모리를 비슷한 heap에 할당하여 관리 하는 것이 메모리 단편화를 막는데 효율적이라고 말한다. 그럼 용도에 맞는 Heap을 관리해야 한다고 하는데 

Why are you having a fragmentation problem? – Sources of fragmentation problems are caused by the behavior of an application and have to do with greatly different allocation lifetimes in the same memory arena. That is, some objects are allocated and freed regularly while other types of objects persist for extended periods of time all in the same heap…..think of the longer lifetime ones as poking holes into larger areas of the arena and thereby preventing the coalesce of adjacent blocks that have been freed.

To address this type of problem, the best thing you can do is logically divide the heap into sub arenas where the lifetimes are more similar. In effect, you want a transient heap and a persistent heap or heaps that group things of similar lifetimes.

아래 댓글을 읽어보면 흥미있는 대화를 하고 있는데 persistent, transient heap을 나눈 것이 일반적인 Garbage collection 정책과 유사한 것이 아니냐 라고 물어보니…

가장 높은 점수를 받은 저자가 embedded에서는 꽤 잘 알려진 사용 방식이라고 말하는 것으로 보아 embedded 개발자로 보인다. 

직접 써봐야 메모리 관리가 얼마나 어려운지 생산성은 얼마나 되는지, 안정적으로 메모리 운용이 가능한지 알 수 있을 것 같다.

말이 나온김이 Java GC 정책에 대해 정리하는 시간을 갖는 것이 좋겠다.