[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과 비슷하지만 레퍼런스 카운트를 증가시

github X jenkins (CI: Continuous Integration) 구성하기 #2 - jenkins 서버구성

이미지
전번에는 젠킨스에서 github를 ssh 접속하기 위해 , ssh 공개키를 만들고 , github에 공개키를 등록해서 ssh를 접속하였습니다. http://devstory.ibksplatform.com/2017/10/github-x-jenkins-ci-continuous.html 이번에는 젠킨스에 github 프로젝트를 생성해 보도록 하겠습니다. # 구성순서 1. SSH 공개키 만들기              2. github에 공개키 등록 3. github ssh 접속 테스트 4. jenkins Github plugin 설치 5. jenkins에 github 서버 등록  6. jenkins 프로젝트 구성 7. github 프로젝트에 jenkins서비스등록 8. 빌드확인(프로젝트 push후 자동 빌드 확인) 그럼 젠킨스에 Github 플러그인을 설치하여야 github와 연동하여 빌드를 자동으로 구성할 수 있습니다. 젠킨스에 접속하여  1. Jenkins 관리  ->  플러그인 관리  에 들어가서   2. 우측 필터에 'git' 입려하여 검색합니다. 3. 검색 결과에서 "Git Plugin" 과 "GitHub Plugin" 2개를 설치합니다. 그다음에는 당연히 젠킨스를 재시작합니다   4. 자 이제 준비가 되었으니 "새로운 Item" 을 젠킨스에 job을 생성합니다. 그리고 젠킨스와 연결해서 빌드를 위한 job을 생성합니다. 5. job명을 입력하고 "Freestyle project" 선택후 "OK" 클릭합니다. 6. 소스코드 관리에서 "Git" 선택합니다. ( "Github" 가 없어도 당황하지 말고 "Git" 입니다. )     그리고 "Repository URL에"  git@github.com