라벨이 ios인 게시물 표시

[iOS 강좌] 오픈API 이용한 날씨 APP 만들기 - 5. 도시 정보 변경

제공하는 날씨 API에서 도시 정보를 획득하려면, 별도로 citi 정보를 받기 위해 API를 호출해야합니다. 아래의 json파일을 아마존 s3 저장소에 저장하고, 호출을 하였습니다. https://s3.ap-northeast-2.amazonaws.com/com.ios/city.list.json Citi정보에 대한 모델 객체를 생성하고,  #import <Foundation/Foundation.h> #import "Coord.h" @interface City : NSObject @property ( nonatomic , strong ) id id ; @property ( nonatomic , strong ) Coord *coord; @property ( nonatomic , strong ) NSString *country; @property ( nonatomic , strong ) NSString *name; @end AFKNetwork를 이용하여 호출을 합니다.   AFHTTPSessionManager *manager = [ AFHTTPSessionManager manager ];          [manager GET :url parameters :parameters progress : nil success :^( NSURLSessionTask *task, id responseObject) {         //         NSLog(@"JSON: %@", responseObject);         [ self resCityCode :responseObject];     } failure :^( NSURLSessionTask *operation, NSError *error) {         NSLog ( @"Error: %@" , error

[iOS 강좌] 오픈API 이용한 날씨 APP 만들기 - 6. 모델 객체

날씨 API 호출된 모델 객체를 생성합니다. {             "dt": 1532314800,             "main": {                 "temp": 308.77,                 "temp_min": 305.287,                 "temp_max": 308.77,                 "pressure": 1002.18,                 "sea_level": 1023.05,                 "grnd_level": 1002.18,                 "humidity": 67,                 "temp_kf": 3.48             },             "weather": [                 {                     "id": 801,                     "main": "Clouds",                     "description": "few clouds",                     "icon": "02d"                 }             ],             "clouds": {                 "all": 20             },             "wind": {                 "speed": 1.47,                 "deg&quo

[Objective-C Tip] Key-Value Observing

개발을 하다보면, 변경사항을 통보받을때, 감시객체를 등록하면, 편리합니다. 감시객체를 등록하고, 동작이 일어나는 부분에서 변경을 해주면, 변경된 결과를 바로 받아볼수 있습니다. 1. 감시객체 등록  [obj addObserver:selfforKeyPath:@"enable"options:NSKeyValueObservingOptionNew| NSKeyValueObservingOptionOld  context:NULL]; ______________________________________________________________________________________________________________________ 2. 감시객체 변경 - (IBAction)observer:(id)sender {     UIButton *temp = (UIButton*)sender;      if (temp.tag==0)     {         NSLog(@"YES");              temp.tag=1;         [objsetValue:[NSNumbernumberWithBool:YES] forKey:@"enable"];          }     else     {         NSLog(@"NO");              temp.tag=0;             [objsetValue:[NSNumbernumberWithBool:NO] forKey:@"enable"];     }   //    obj.enable=YES; } ______________________________________________________________________________________________________________________ 3. 감기객체가 변경되면 알려줌 -(void)observeValu

[Objective-C Tip] UImage 이미지 리사이징

프로젝트 하실때, UIImage를 많이 사용합니다. 이번 시간에는 UIImage의 관련된 팁을 드리고자 합니다. * 크기 변경 - (UIImage *)resizeImage:(UIImage *)image width:(int)width height:(int)height {          CGImageRef imageRef = [image CGImage];     CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);          //if (alphaInfo == kCGImageAlphaNone)     alphaInfo = kCGImageAlphaNoneSkipLast;          CGContextRef bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef), 4 * width, CGImageGetColorSpace(imageRef), alphaInfo);     CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);     CGImageRef ref = CGBitmapContextCreateImage(bitmap);     UIImage *result = [UIImageimageWithCGImage:ref];          CGContextRelease(bitmap);     CGImageRelease(ref);          return result;     } * 이미지 자르기 - (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect { UIGraphicsBeginImageContext(rect.size); CGContextRef currentCon

[Objective-C Tip] 메모리 관리

Objective-c 의 메모리 관리에 대해서 알아보겠습니다. -alloc : 해당 객체에 메모리를 할당하고 레퍼런스 카운트를 1 올립니다. -retain : 해당 객체의 레퍼런스 카운트를 1 올립니다. -copy : 해당 객체의 복사본을 만듭니다. 그리고 복사본의 레퍼런스 카운트를 1 올립니다. -release : 해당 객체의 레퍼런스 카운트를 1 낮춥니다. -autorelease : 정해지지 않은 시점에 해당 객체의 레퍼런스 카운트가 -1 낮아집니다. * 규칙 1. 블록 내에서 alloc, retain, copy의 수와 release, autorelease 수가 동일해야 합니다. 2. factory 함수를 사용해 생성한 객체의 경우는 대부분 autorelease로 반환됩니다. 따로 release를 할 필요가 없습니다. 3. 클래스의 인스턴스 변수들은 dealloc 메소드에서 다 release해야 합니다. ______________________________________________________________ 인스턴스 메소드에서 인스턴스 변수에 새로운 값을 assign하는 방식에는 두가지가 있습니다. 인스턴스 변수명이 someObject 라고 할때 -(void) testRetainCount { someObject = xxx;       //첫번째방식 self.someObject = xxx;  //두번째방식 } 두번째 방식은 변수를 property화 하고 synthesize 했을 때만 사용 가능합니다. 두 방식 모두 assign하는 대상 주소는 같지만 retainCount의 차이가 발생하므로 주의를 요합니다. someObject = xxx;  //잘못된 메모리 참조로 앱이 크래시 될 수 있습니다. self.someObject = [xxx retain]; //메모리 릭이 발생합니다. 다음은 올바른 방법입니다. someObject = [xxx reta

[Objective-C Tip] 디클레어 프로퍼티

Objective-c의 디클레어 프로퍼티에 대해서 알아보겠습니다. 프로퍼퍼티 속성은 readonly, readwrite, assign, retain, nonatomic  가 있습니다. + readonly 읽기 전용 ->읽기 쓰기 속성 ,읽기만 가능 getter메서드만 가능  + readwrite 읽기 쓰기 가능(기본값) ->읽기 쓰기 속성 ,단순하게 값을 대입 (기본설정) + assign 대입으로 값을 설정(기본값)->값의 설정 방식 + retain 객체를 보존(retain)해서 설정 ->값의 설정 방식 ,이전에 가리키고 있던 객체를 release하여 메모리에서 제거 + nonatomic 매소드는 배타적으로(독점적으로) 실행하지 않아도됨 ->                        멀티쓰레드 환경에서 사용하지 않는 산 접근자를 더 빠르게 동작 하게함 프로퍼티가 객체인 경우 읽고 쓰기가 가능한 프로퍼티에 assign, retain m copy 세가지 옵션으로 지정할수 있습니다. 프로퍼티가 객체가 아닌 경우 옵션은 지정하지 않아도 된다. 지정한다면 assign만 지정할 수 있습니다. getter=getterName - getter의 이름을 getterName로 지정합니다. setter=setterName - setter의 이름을 setterName로 지정합니다. readwrite - 기본동작으로 getter와 setter를 모두 만듭니다. Mutually exclusive로 readwrite합니다. readonly - getter만 만듭니다. Mutually exclusive로 readwrite합니다. 값을 할당하려고 하면 컴파일 오류가 발생합니다. assign - 기본동작이며 setter가 간단한 할당을 사용합니다.(예 location = where;) 객체를 소유할 필요가 없을때 사용합니다. retain - assign과 비슷하지만 레퍼런스 카운트를 증가시

[iOS 개발팁] 빌드 환경 분리하기

이미지
Xcode에서는 Plist 파일을 이용하여 빌드 환경을 분리하여 관리할 수 있습니다. 프로젝트를 진행하다보면, 개발환경, 운영환경에 맞게 App를 빌드하여 테스트를 진행할 경우 들이 있습니다. 프로젝트를 처음 생성하면, 아래와 같이 info.plist 파일이 생성이 됩니다. 프로젝트에 대한 설정값들을 관리 할수 있는 파일인데요. 프로젝트 파일을 선택하기 되면, 아래와 같이 현재 연결된 타겟으로 정보를 입력할수 있습니다. Bundle identifier 에 번들명을 입력하게 되어있습니다. 여기에 TARGETS를 추가하면, 다른 번들을 추가 할수 있습니다. Duplicate를 통해 타겟을 복사합니다. 복사한 뒤 dev 라고 이름을 변경합니다. 그후 "Edit Sceme.." 선택하고,  하단에 "Manage Scemes.." 를 선택합니다. 기존의 new가 있고, 새로운 schemes이 추가되어있습니다. 이스키마도 dev로 변경합니다. 변경 후에는 상단 프로젝트에서 스키마를 선택할수 있게 됩니다. 그다음 추가된 plist파일을 이름을 변경하고, Build Settings에서 변경된 이름을 넣어줍니다. 여기까지가 타겟을 추가하고, 스키마, plist파일을 연결해주는 세팅입니다. 이제는 각종 path 및 이름들을 설정해주면됩니다. 각종 API 패스들, 프로젝트 이름를 따로 설정하고, 빌드할때, 타겟만 변경하면 되므로, 매번, 패스들을 변경할필요가 없어서, 안정적인 빌드를 할수 있습니다. 아이프렌즈펫에서는 운영버전과 개발버전에 대한 경로들을 plist에서 정의해두고, 사용하고있습니다. 여러분들의 프로젝트도, 빌드 환경을 분리해서 안정적으로 운영해보세요 운영버전 개발버전

[iOS 강좌] 오픈소스로 쉽게 카메라 앱 만들기 - 1부(cocospods)

이미지
안녕하세요. 플랫폼사업팀에서 ios개발 업무를 담당하고 있는 남산타워입니다. 첫 게시글은 어떤글이 좋을까 고민하다가, 강좌를 생각하게 되었습니다. ios 개발자라면, 모두들 오픈소스를 많이 이용하실꺼같은데요. 오픈소스를 이용해서, 쉽게 앱을 제작하는 하는 강좌를 써보려 합니다. 요즘 앱 순위중에 가장 상위에 있는 앱이 카메라 앱인데요. 여러 필터들을 이용해서, 예쁜 사진을 만들 수 있습니다. 엄청 어려운 부분이지만, 오픈소스를 이용하면, 간단하게 만들 수 있습니다. 일단 강좌는 총 3부로 구성해보았습니다. [iOS 강좌] 오픈소스로 쉽게 카메라 앱 만들기 - 1부 (cocospods) [iOS 강좌] 오픈소스로 쉽게 카메라 앱 만들기 - 2부 (카메라) [iOS 강좌] 오픈소스로 쉽게 카메라 앱 만들기 - 3부 (필터) 일단 첫 시간에는 CocosPods를 파헤쳐보겠습니다. CocosPods는 ios 개발자라면, 한번은 들어보셨을꺼예요. cocosPods는 Objective-C 코코아 프로젝트의 종속적 관리자입니다. 쉽게 말해, 오픈소스나 라이브러리를 관리할 수 있게 해주는 도구 인데요. xCode에서 플러그인를 설치하고 이용했으면 좋았으나, 별도의 프로그램입니다. 이 도구를 만들어준 개발팀에 감사해야합니다. 자세한 사항은 아래의 cocosPods 사이트에 접속해서 상세히 알아보시면 될꺼같습니다. https://cocoapods.org/ 그럼 시작하겠습니다. 1. 프로젝트 생성 2. CocosPods 다운로드 3. CocosPods 설치 4. CocosPods 설정 및 라이브러리 설치 1. 프로젝트 생성 프로젝트를 생성합니다. 2. CocosPods 다운로드 터미널에서 cocosPods를 다운받습니다. 맥의 파인더를 열고, 터미널을 실행합니다. ( 파인더/응용프로그램/유틸리티) 터미널이 실행 되면, 다운로드를 받습니다. 명