실행속도 1/60NSTimer, UIImageView 의 1/30보다 빠르다. CADisplayLink *displayLink; self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(runLoop)]; [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];모드는 2가지가 존재. //NSDefaultRunLoopMode, NSRunLoopCommonModes지울 때는 removeFromRunLoop 사용하면 된다. -(void)runLoop { }
[문씨의 강좌] 메모리 관리2 http://cafe.naver.com/mcbugi/71571 [TIP] retain 프로퍼티 변수사용시 self 사용 주의 - 메모리릭 http://cafe.naver.com/mcbugi/56420 nonatomic을 쓰는이유 http://cafe.naver.com/mcbugi/102093 nonatomic을 쓰는이유 결론 : property 선언시 명시적으로 atomic으로 설정되게 된다. atomic으로 설정될경우 해당 property를 접근할 때마다 lock과 unlock를 반복하게 되므로 성능저하를 가져올 수 있다. 하지만 멀티쓰레드 환경에서 해당 property를 보호하기 위해 atomic으로 사용하는게 좋다. 하지만 대부분은 멀티쓰레드를 사용하지 않기에 nona..
NSTimer는 전역으로 설정해주는 것이 나중에 관리할 때 문제가 없기 때문에 전역으로 설정해서 쓰는 편이다. 아니면 "Timer = "이 부분을 제외하고 써줘도 문제는 없으나 객체(view)가 dealloc 되더라도 타이머를 죽이지 않으면 실행되기 때문에 방어 코드가 필히 들어가야 한다. //타이머 생성 timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerMethod) userInfo:nil repeats:YES]; //타이머 해제 if (timer != nil) { [timer invalidate]; timer = nil; } //활용 - 타이머 userInfo에 값을 할당하여 전달 할 수도있는..
//어플에서 설치되어 있는 다른 어플을 실행할 수 있으며 인자값을 넘길 수 있다. //???_info.plist 에 URL types 을 추가하고 그 안에 URL Schemes : "test" URL identifier : "com.youCompany.test" 를 정의해 준다. xcode4 에서는 plist에 URL types를 추가할 경우 해당 어플 Project ->Target -> "Info"탭 하단에 URL types를 추가하는 곳이 별도로 존재 한다. //실행될 어플 delegate에 추가. - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { NSLog(@"handleOpenURL"); NSString *U..
//숫자 표현 (화폐단위, 퍼센트, 소수점 절사 등등) double num = 12345678.12345; NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init]; [fmt setNumberStyle:kCFNumberFormatterNoStyle]; NSString *str = [fmt stringFromNumber:[NSNumber numberWithDouble:tempResultNum]]); [fmt release]; //각각의 스타일을 설정할 경우 다음과 같은 결과값을 가지게 된다. kCFNumberFormatterNoStyle : 12345678 kCFNumberFormatterDecimalStyle : 12,345,678.123 kCFNumberF..
어플내에서 하나의 데이터를 여러곳에서 사용하거나 하나의 View를 여러곳에서 접근할 경우가 생긴다. 이럴 때 전역으로 객채를 생성해서 사용하게 된다. 처음에는 UserDefault값을 이용하여 모든 공유객채를 appDelegate에 넣어 사용하였지만 어플규모가 커지면서 별도의 공간을 만들어 놓고 사용해야 할듯 싶어 singleton을 사용하거나 extern을 사용하게 되었다. UserDefault 사용하기 //extern 을 사용하기 extern으로 선언된 객채를 사용하기 위해서 해당 객채가 속한 클래스를 import해서 바로 사용하면 된다. 해당 클래스에 접근하고자 하는 속성은 @property 설정이 되어 있어야 한다. 해당 클래스를 alloc 생성하지 않고 사용해도 되는 점에서 편리하다. #impo..
//생성 mainViewController = [[MainViewController alloc] init]; naviController = [[UINavigationController alloc]initWithRootViewController:mainViewController]; [naviController setNavigationBarHidden:YES];//상단 타이틀 배경 숨김 [self.window addSubview:naviController.view]; [mainViewController release]; //MainViewController 에서 다른 View를 추가할 경우 SubViewCont *subView = [[SubViewCont alloc] initWithFrame:CGRectMa..
해당 어플에서 환경설정 값이나 사용자 정보를 보관해야 할 경우가 생긴다 그 때 자주쓰게 되는것이 NSUserDefaults 이다. 전체 내용을 저장하고 불러올 수 있으며, 개별적으로 가능하다. //앱 삭제 후 재 설치 하더라도 값이 남아있음.//앱 최초 실행을 체크하기에는 캐쉬에 파일 생성 여부로 확인함. #pragma mark config -(void)configLoad { NSUserDefaults *UD = [NSUserDefaults standardUserDefaults]; if (UD) { g_Id = [UD objectForKey:@"id"]; g_Password = [UD objectForKey:@"password"]; num = [UD integerForKey:@"number"]; } } ..
NSUserDefaults 에 사용자 정보를 저장하기에는 그렇고 별도로 암호화/복호화 하기도 번거롭고 해서 중요한 정보인 사용자 id, password를 저장해놓고 사용하기 위해 keychain을 사용하였다. //애플 래퍼런스 문서 (해당 셈플코드에서 KeychainItemWrapper 클래스 소스를 가져다 쓰기바람 ) http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007797-Intro-DontLinkElementID_2 // framework 에 Security.framework 추가. NSString *idKey = @"id"; NSStri..