본문 바로가기
[iOS Study] 뷰와 뷰 계층구조 [iOS Study] 뷰와 뷰 계층구조 출처 : 아론 힐리가스의 iOS 프로그래밍 - 뷰는 UIView 의 인스턴스이거나 그 하위 클래스의 인스턴스이다. 뷰는 자신을 그리는 법을 알고 있다. 뷰는 터치와 같은 이벤트를 처리한다. 뷰는 뷰 계층구조상에 존재한다. 뷰 계층구조의 루트는 앱의 윈도우이다. - iOS 앱은 앱의 모든 뷰의 컨테이너 역할을 하는 UIWindow 인스턴스를 하나 가진다. 윈도우는 앱이 실행될 때 만들어진다. 그리고 윈도우가 만들어지면 그 윈도우에 다른 뷰들을 추가 할 수 있다. - 계층의 모든 뷰는 윈도우를 가지고 자신을 그린다. 뷰는 그 자체를 자신의 CALayer 인스턴스인 레이어에 나타낸다 ( 뷰의 레이어는 비트맵 이미지로 생각할 수 있다. ) 모든 뷰의 레이어들이 화면에 합성.. 2016. 2. 16.
[iOS Study] ARC 를 통한 메모리 관리 [iOS Study] ARC 를 통한 메모리 관리 출처 : 아론 힐리가스의 iOS 프로그래밍 - 메소드나 함수가 실행되면 스택(stack)이라고 하는 메모리 영역의 일부가 할당된다. 이 할당된 메모리 공간을 프레임(frame)이라고 한다. -프로그램을 시작하고 main() 이 실행되면 main() 의 프레임이 스택에 들어간다.main() 이 다른 메소드(또는 함수)를 호춣하면 그 메소드의 프레임은 스택의 꼭대기에 들어간다. 각 메소드나 함수가 끝날 때마다 해당 프레임은 스택 꼭대기에서 즉시 빠져나와 사라진다.그 메소드가 다시 호출되면 새 프레임이 할당되고 스택에 들어간다. - ARC(자동 레퍼런스 카운팅, Automatic Reference Counting) 가 프로그램의 메모리 관리를 대신해준다. - .. 2016. 2. 15.
[android] Lollipop (LOS) 부터는 Notification Icon 에 색상을 넣을 수 없다? [android] Lollipop (LOS) 부터는 Notification Icon 에 색상을 넣을 수 없다? 출처 : https://developer.android.com/intl/ko/about/versions/android-5.0-changes.html#BehaviorNotifications #Lollipop ( Android 5.0 ) 부터는 Notification 의 Icon 의 Color 값을 전부 무시하며, Non-Alpha Channel 은 모두 White 로 바꾸어 버린다.즉, Alpha 가 있는 부분은 transparent 로, Alpha 가 없는 부분은 모두 흰색으로 표시한다. ( Material Design 의 영향 ) #만약 기존과 같이 색상이 있는 Notification Icon.. 2016. 2. 14.
[iOS Study] Objective-C [iOS Study] Objective-C 출처 : 아론 힐리가스의 iOS 프로그래밍 -iOS 앱은 코코아 터치(Cocoa Touch) 프레임워크를 사용하여 Objective-C 언어로 작성된다.Objective-C 는 C 언어의 확장이며 코코아 터치 프레임워크는 Objective-C 클래스의 모음이다. - 일반적으로 Objective-C 에서는 인스턴스 변수명을 밑줄(_) 로 시작한다. - 객체를 만들기 위해서는 클래스에 alloc 메세지를 보낸다. 이에 클래스는 메모리(힙)에 객체를 만들고 변수에 저장된 그 객체의 주소를 준다. -Party* partyInstance = [Party alloc];[partyInstance init]; 새로 할당한 인스턴스에 보내는 첫 메시지는 항상 초기화 메시지다. .. 2016. 2. 13.
[iOS Study] 간단한 iOS 앱 만들기 [iOS Study] 간단한 iOS 앱 만들기 출처 : 아론 힐리가스의 iOS 프로그래밍 -모델과 뷰는 서로 통신하지 않는다. -XIB 은 “집” 이라고 읽는다.XML Interface Builder 를 의미한다. -Xcode 에서 좌측 section 을 [네비게이터 영역], 우측 section 을 [유틸리티 영역] 이라고 부른다.유틸리티 영역의 상단의 [인스펙터(inspector)] 와 하단의 [라이브러리(library)] 로 구성된다. -프로젝트 네비게이터의 그룹은 순전히 파일을 구성하는 데만 사용되고 실제 파일 시스템에 디렉터리 형태로 만들어지지는 않는다. -인터페이스 빌더는 편집기 영역을 두 부분으로 나눈다.왼편의 [독 (dock)]과 오른편의 [캔버스 (canvas)]이다. 독은 XIB 파일 내.. 2016. 2. 12.
[Effective Java] 쓸모 없는 객체 참조를 제거하자. [Effective Java] 쓸모 없는 객체 참조를 제거하자. - 자바와 같이 가비지 컬렉션을 자동으로 해주는 언어는 메모리 관리를 따로 해줄 필요가 없다고 생각하기 쉬우나, 이는 틀린 생각이다. GC 의 원리에 대해 정확히 이해하고 메모리 관리를 해주어야 한다. 다만 그 메모리 관리하는 범위가 C, C++ 과 같은 GC 가 없는 언어들에 비해 더 간단할 뿐! - 자바에서도 메모리 누출(memory leak)이 쉽게 발견된다. 메모리 누수가 생기면, 성능저하의 형태로 서서히 나타난다. GC 작업이 증가하거나, 메모리 할당과 회수 횟수가 빈번해지기 때문이다. 심하면 디스크 페이징 현상이 나타나기도 하고, 아주 극단적으로는 OutOfMemoryError 가 발생한다. 메모리 누수의 무서운 점은, 특정 객체.. 2016. 1. 4.
[Effective Java] equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. [Effective Java] equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. - 인스턴스의 동일 여부를 판정하는 equals 메소드의 오버라이딩은 간단한 것 같지만, 잘못되는 경우가 많아서 참담한 결과를 초래할 수 있다. ( 기본 equals 는 참조를 비교한다. ) - 다음의 조건이 만족된다면 슈퍼 클래스의 equals 를 그냥 사용해도 된다. 1. 클래스의 각 인스턴스가 본래부터 유일한 경우. 2. 두 인스턴스가 논리적으로 같은지 검사하지 않아도 되는 클래스의 경우. 3. 수퍼 클래스에서 equals 메소드를 이미 오버라이딩 했고, 그 메소드를 그대로 사용해도 좋은 경우. 4. private 이나 패키지 전용(package private) 클래스라서 이 클래스의 equals 메소드가.. 2015. 12. 31.
[android] Binder 와 Death Recipients 에 대한 이해 [android] Binder 와 Death Recipients 에 대한 이해 안드로이드는 기본적으로 multi-task 를 위해 만들어진 앱이다. 그래서 초창기에는 user 가 명시적으로 process 를 죽이지 못하도록 만들고, main activity 를 종료했을 때는 아주 낮은 priority 로 계속 process 를 살려둔다. 왜 그렇게 하냐? app switching 이 일어날 때 process 를 처음부터 만들려고 하면 너무 많은 시간이 들기 때문이다. 그럼 process 들을 유지함으로서 메모리가 부족하면 어떻게 하냐? 해당 process 를 최소한의 정보를 보존한 후 죽인다. 그리고 해당 process 가 다시 launch 되면 최소한의 정보를 통해 어느 정도 선까지는 상태복구를 해준다.. 2015. 12. 29.
Long 을 Int 로 casting 할 때 다음을 고려하자. Long 을 Int 로 casting 할 때 다음을 고려하자. -casting 하려는 long 값이 양수, 음수를 모두 사용한다면, 그리고 충분히 큰 값을 사용한다면함부로 int 로 casting 해서는 안된다. - 안전한 down casting 다음과 같이 하면 좋다. public static int safeLongToInt(long l) {if (l Integer.MAX_VALUE) {throw new IllegalArgumentException(l + " cannot be cast to int without changing its value.");}return (int) l;} -값 손실을 고려한다면 IllegalArgumentException 대신 .. 2015. 12. 28.
반응형