본문 바로가기

전체 글236

7. 메모리 관리 ARC(Automatic Reference Counting) 객체를 소유한 전체 개수를 파악하기 위한 레퍼런스 카운트(Reference Count)가 있다. 이 레퍼런스 카운트를 자동으로 관리하는 기술이 ARC이다. 레퍼런스 카운트는 클래스에 기반한 레퍼런스 타입에만 적용된다. 원시 타입이나 구조체(Struct), Enum타입은 ARC대상이 아니다. 소유하기 객체를 소유하는 방법은 강한 포인터로 객체를 참조하는 것이다.var obj : MyClass? = MyClass() // 소유권을 해제하려면 nil을 할당해야 하므로 옵셔널이나 강제 언래핑으로 선언 obj = nil // 소유권 해제 소유권을 해제하는 것이 객체 해제를 의미하지는 않는다. 객체를 소유하는 포인터가 다수일 수 있다. 이 경우 객체를 생.. 2015. 10. 5.
6. 메소드 메소드(method) 객체의 행위를 클래스에 정의한 함수를 메소드라고한다.// 메소드의 예class Counter { var count = 0 func increment() { count++ } func reset() { count = 0 }} let counter = Counter()counter.increment() counter.reset() 파라미터 이름 메소드도 파라미터와 파라미터 이름을 사용한다. 클래스 내부에 작성하는 메소드에는 두 번째 파라미터부터 외부 파라미터 이름을 자동으로 사용한다. 별도로 외부 파라미터 이름을 지정하지 않으면 내부 파라미터 이름이 외부 파라미터 이름이 된다.class Counter2 { var count = 0 func incrementBy(amount: Int, n.. 2015. 10. 1.
5. Class 클래스 정의와 객체 생성 class ClassName { // to do} // 클래스 객체 생성 var cls = ClassName() 객체 비교 클래스에서 객체를 생성하면서 변수나 상수에 대입한다. 클래스는 value type인 숫나 문자열과 다르게 레퍼런스(Reference) 타입이다. 밸류 타입은 다른 변수나 상수에 대입하면 값을 복사하고 레퍼런스 타입은 값을 복사하지 않는다. 밸류 타입은 == 연산자를 이용해서 값을 비교하지만 같은 주소를 가지는 객체를 비교하려면 === 연산자를 사용한다.var obj1 = ClassName()var obj2 = obj1var obj3 = ClassName() obj1 === obj2 // true obj1 === obj3 // false 프로퍼티 객체가 다루는.. 2015. 9. 30.
4. 함수 함수 함수는 동작을 작성하는 단위로 func 키워드로 정의한다.// 함수의 정의func greeting() { print("hello") }// 함수 호출 greeting() 함수 반환값 함수의 동작 결과를 반환하려면 파라미터 오른쪽에 ->를 이용한다. 반환 타입이 없으면 생략 가능하다.func areOk() -> Bool { return true} func favorite() -> String { return "coffee" } 다수의 반환값 함수의 결과로 다수의 결과를 반환하려면 튜플을 사용한다.// 난수 3개를 튜플로 반환func random3() -> (Int, Int, Int) { let r1 = Int(arc4random() % 10) let r2 = Int(arc4random() % 10) .. 2015. 9. 30.
3. 옵셔널 옵셔널(Optional) Swift에서 일반적인 변수나 상수는 값이 설정돼있어야 한다. 값이 설정되지 않은 상태를 nil이라고 하고 옵셔널로 선언해야 한다.Swift에서 객체형 변수외에도 nil은 Int나 Float와 같은 원시 타입에도 사용할 수 있다. 그러나 다음과 같이 변수에 nil을 대입하는 방식은 에러가 발생한다. var i = nil // error nil을 다루려면 옵셔널 타입으로 선언해야 한다. 옵셔널로 변수나 상수를 정의하려면 타입에 물음표를 붙여서 선언하며 타입 선언을 생략할 수 없다.var i : Int? = nil 옵셔널 사용하기 nil에 함수를 호출하거나 프로퍼티를 접근하려고 하면 런타임 에러가 발생한다. 컴파일러는 nil이 될 수 있는 옵셔널 타입에 프로퍼티나 메소드를 호출하려고.. 2015. 9. 30.
2. 기본 문법과 타입 import import Foundationimport UIKit // iOS용 프로젝트, 플레이그라운드import Cocoa // OS X용 플레이그라운드 main 전통적으로 main파일의 main함수에서 애플리케이션이 시작하지만 Swift는 별도의 main함수를 작성하지 않는다. main 소스 코드의 글로벌 영역에서 시작. 세미콜론 Objective-C를 포함한 많은 프로그래밍 언어에서 문장 끝에 세미콜론(;)을 붙이지만 Swift에서는 생략할 수 있다. 단 한 줄에 여러 문장을 작성할 때는 세미콜론으로 구분.var i = 0; i = 1 공백 문자공백의 위치에 따라서 연산자를 다르게 인식한다. 일반적인 코드는 다음과 같지만 let i1 = 1 + 2 let i2 = 1+2 한 쪽만 붙여 사용할 경우.. 2015. 9. 21.
마케팅을 위한 고객 리서치 방법 리서치탐색조사상황 탐색을 하는 것전략조사회사에서 컨셉을 만드는 것. 얼마나 먹힐지, 사람들의 반응은 어떨지추적조사시행된 것이 시장에서 제대로 성과가 나오는지 조사해서 개선안을 마련하기 위한 것조사정량조사숫자로 된 수치가 되어있는 것정성조사추측하는 것HUT(Home Use Test)시장 출시 전 제품에 대한 사전 피드백 파악 가능담배 신제품을 만든다면, 실제 흡연자들에게 나눠준 뒤 결과 리서치 목적을 명확하게 제시하고 시행해야 한다. 그렇지 않으면 산으로 갈 수 있다.조사 대상자는 가장 적합하거나 타겟에게 설문 조사를 해야한다. 찾기가 매우 어려운 조사일 경우, 푸스터 샘플(50~100명 이내) 수집이 필요30문항 이상 혹은 15분을 넘어갈 경우, 응답자들의 응답 집중도가 낮아지는 경향을 보임설문 만들 때.. 2015. 9. 16.
[!] Pods written in Swift can only be integrated as frameworks; add `use_frameworks!` to your Podfile or target to opt into using it. The Swift Pod being used is: [!] Pods written in Swift can only be integrated as frameworks; add `use_frameworks!` to your Podfile or target to opt into using it. The Swift Pod being used is: 외부 라이브러리를 추가할 때 cocoapods를 이용하다보면 이런 메세지를 보는 경우가 있다.제대로 추가도 안되거니와, .lock파일이 생성이 안된다. 이유는 명확. 써 있는 대로 use_frameworks! 를 Podfile에 추가하면 된다. # Uncomment this line to define a global platform for your project# platform :ios, '6.0'pod ‘Googl.. 2015. 9. 8.
GCM ios에 적용하기 GCM이 IOS를 공식적으로 지원하기 시작하면서, 크로스 플랫폼 개발에 있어 푸시 서비스를 단일화 할 수 있게 되었다. 굳이 GCM을 사용할 필요가 있는가? 라고 하면, 가장 큰 장점은 3.0에 와서 푸시 서버를 따로 만들 필요가 없어진 점을 가장 큰 장점이라고 말 할 수 있다. GCM을 적용하기 위한 사전 준비는, 기존의 APNS와 같다. 인증서를 만들고, 푸시를 사용할 앱을 애플 개발자 사이트에 등록하고 키체인을 만든다. 그 중 필요한 것은 p12파일이다. 해당 과정은 다른 곳에 많이 나와있으니 지금은 생략하고 나중에 시간이 날 때 천천히 정리할 예정이다. 우선 이 곳에서는 실제로 코드에 적용시키는 부분을 살펴보자. GCM 사이트에서 iOS 등록을 진행하다보면 GoogleServices-Info.pl.. 2015. 9. 8.