목록IOS (15)
ㄷㅣㅆㅣ's Amusement
오늘은 간단한데 오래 전부터 objective-c를 썼던 사람이나, 6개월 미만의 사람들이 자주 하게되는 이상한(?)코딩에 대해서 포스팅한다. 1. 간단한 초기화 - NSArray, NSSet, NSDictionary를 초기화 할때에 옛날 개발자들이나, 아니면 옛날 책을 가지고 공부한 사람들은 대부분 다음과 같이 한다.1234567- (void)viewDidLoad { [super viewDidLoad]; NSArray *menuBtns = [[NSArray alloc] init]; NSSet *menuSet = [[NSSet alloc] init]; NSDictionary *menuDic = [[NSDictionary alloc] init];}Colored by Color Scriptercs 매우 맞다..
1. code block을 받는 함수 - Java/Android에서는 interface로 listener를 만들어 결과를 받는것이 일반적이지만, objective-c/iOS 에서는 코드블럭이나 델리게이트를 통해 주고받는것이 일반적이다. 다음 예제코드는 iOS 앱에서 캘린더에대한 접근 권한을 요청하는 함수이다. 캘린더 접근권한을 요청하면 사용자에게 팝업이 제공되는데, 이때에 사용자가 "확인"버튼을 누를때까지 메인 스레드가 정지해서는 안되기 때문에 코드블럭을 넘겨받아 처리하였다.123456789101112131415161718192021222324252627- (void)requestAccessToEvents:(void (^)(BOOL bGranted))complete { BOOL needsToRequest..
iOS에서 캘린더에 접근하는 방법. 1. header - @import EventKit; 2. Getting Permission. 123456789101112131415161718192021222324- (void)requestAccessToEvents:(void (^)(BOOL bGranted))complete { BOOL needsToRequestAccessToEventStore = NO; EKAuthorizationStatus authorizationStatus = EKAuthorizationStatusAuthorized; if ([[EKEventStore class] respondsToSelector:@selector(authorizationStatusForEntityType:)]) { autho..
Objective-c에서... Category라는 개념이 나오는데, 이건 뭐... 라자냐 코드가 되는 것을 방지해주기 위해서 매우 중요한 메카니즘인거는 다 알겠고... 아무도 얘기해주지 않아 직접 해봐야만 하는 것중에... 이때에도 오버라이딩이 되는가?? 임. 단순 호기심에 시도해봤는데... 잘됨 ㅋㅋㅋ 그런데... 상속과 다르게 카테고리는... 원본 클래스에 덮어씌우는 개념이기 때문에 이렇게하면 대략 좋지가 않다. 프로젝트 전체에서 그 클래스가 하는동작이 서로 상이하게되면... 이건 스파게티나 라자냐 코드보다 더 큰 문제가 야기될 수 있기 때문. 물론 아무리 그렇다고 해도 꼭 써야할 때는 써야지!! 하지만 정당한 이유 없이 쓰면 코드리뷰하다가 귓방맹이 맞을수도 있으니 주의!! 또 주의하자.
NSSet이나 NSMutableSet을 이용하면... 당연히 중복이 없어져야한다... 집합이니까... 그런데!! 신경써서 override하지 않으면 중복이 생길수가 있음... 아오... 이거 맨날 빼먹고 하다가 디버깅 한시간씩 잡아먹고 그러지.. isEqual함수만 오버라이드하면 되는줄 알았게찌? 근데 디버깅하면 일일이 다 비교하지 않아서 이게 뭥미;; 하고 한시간씩 정신과 시간의 방에 갇히게 됨. - (BOOL)isEqual:(id)other { // TODO : 중복체크 로직 } 아직도 무슨말인지 잘 모르겠는 사람 있을게야... 당신이 빠뜨린 한가지... function hash override - (NSUInteger)hash { return [[self cardName] hash]; } 이거 안해..