본문 바로가기

프로그래밍

KVC(Key-Value Coding) & KVO(Key-Value Observing) KVC(Key-Value Coding) - NSObject에 NSKeyValueCoding.h가 카테고리로 포함되어있어 NSObject만 상속받더라도 사용 가능 - NSDictionary처럼 문자열로 된 key를 사용하여 객체의 속성값에 간접 접근하는 방법. - 코드가 간결해지고 유지보수가 쉬움 - 클래스간 의존성이 낮아짐 - 객체 형태로만 주고받음 1) ex: NSInteger → NSNumber형으로 return하므로 intValue 사용하여 형변환 필요. - 직접 접근하는 방법에 비해 느림(많은 과정을 거침) - 객체 접근 과정 1) key로 들어온 문자열과 같은 이름의 메소드 확인. 2) 비슷한 getter 메소드 확인(없을 경우 이 이름의 property가 없음) 3) 배열과 관련된 index,.. 더보기
비동기 처리방법 및 장/단점(GCD 제외) 비동기 처리 - 소요시간이 오래 걸리는 작업을 백그라운드에서 처리하여 메인 스레드에 반영. - 동시에 여러 작업을 하거나 지속적인 모니터링이 필요한 작업에 사용. 1) 웹 상의 이미지 다운로드 2) 데이터 파싱 3) 채팅관련 푸시 모니터링 등 비동기 처리 방법 - 비동기 디자인 패턴 : delegate, @selector, block, Notification - NSThread 1) NSOperation보다 우선순위 관리가 좋음 2) 사용 방법 1] 상속: main() 메소드를 overriding, 인스턴스 생성 후 start() 메소드 실행. 2] 클래스메소드: 실행 할 작업을 메소드에 구현, 인스턴스 생성 후 start() 메소드 실행. 3] detachNewThreadSelector - 클래스메소드.. 더보기
거리 값을 LCD에 표시하기 준비물 - LCD 모니터 1개 - 초음파 센서 1개 - 1㏀ 저항 2개 코드 #include //초음파 센서 핀 설정 const int distTrigPin = 8; const int distEchoPin = 9; const float distVal = 58.2; //LCD 핀 설정 const int lcdRSPin = 12; const int lcdEPin = 11; const int lcdD4Pin = 2; const int lcdD5Pin = 3; const int lcdD6Pin = 4; const int lcdD7Pin = 5; LiquidCrystal lcd(lcdRSPin, lcdEPin, lcdD4Pin, lcdD5Pin, lcdD6Pin, lcdD7Pin); void setup() { p.. 더보기
주위 밝기 값을 LCD에 표시하기 준비물 - LCD 모니터 1개 - 조도 센서 1개 - 1㏀ 저항 2개 - 10㏀ 저항 1개 코드 #include const int inputLightPin = A0; const int lcdRsPin = 12; const int lcdEPin = 11; const int lcdD4Pin = 2; const int lcdD5Pin = 3; const int lcdD6Pin = 4; const int lcdD7Pin = 5; //LCD 초기화(RS, E, D4, D5, D6, D7); LiquidCrystal lcd(lcdRsPin, lcdEPin, lcdD4Pin, lcdD5Pin, lcdD6Pin, lcdD7Pin); void setup() { //LCD 크기 지정(2x16) lcd.begin(16, 2.. 더보기
거리에 따른 piezo 스피커 출력시간 조절 준비물 - 초음파 센서 1개 - piezo 스피커 1개 코드 //초음파센서 trig, echo핀 설정 const int distTrigPin = 2; const int distEchoPin = 3; const int piezoPin = 8; void setup() { pinMode(distTrigPin, OUTPUT); pinMode(distEchoPin, INPUT); } void loop() { //거리 측정 digitalWrite(distTrigPin, HIGH); delayMicroseconds(10); digitalWrite(distTrigPin, LOW); long duration = pulseIn(distEchoPin, HIGH); if (duration == 0) { return; } lo.. 더보기
거리에 따른 3색 LED 색 변경 준비물 - 초음파 센서 1개 - 3색 LED 1개 코드 //초음파센서 trig, echo핀 설정 const int distTrigPin = 2; const int distEchoPin = 3; //3색 LED 핀 설정 const int ledRedPin = 11; const int ledGreenPin = 10; const int ledBluePin = 9; void setup() { pinMode(distTrigPin, OUTPUT); pinMode(distEchoPin, INPUT); } void loop() { analogWrite(ledRedPin, 0); analogWrite(ledGreenPin, 0); analogWrite(ledBluePin, 0); //거리 측정 digitalWrite(d.. 더보기
setNeedsLayout VS layoutIfNeeded / setNeedsDisplay VS layoutIfDisplay setNeedsLayout - 호출 시 needsLayout flag가 YES로 변경. - 호출 즉시 뷰가 적용되는 것이 아니라 다음 run loop에 뷰 변경이 적용 - 여러 부분에서 호출하더라도, 다음 run loop에서 한번만 적용 - layoutSubview가 호출 됨 layoutIfNeeded - 호출 시 needsLayout flag를 체크하여 YES인 경우 뷰 변경을 즉시 적용. - 호출 즉시 뷰 변경을 적용하기 때문에 여러 부분에서 사용할 경우 성능상의 문제가 생길 수 있음 - layoutSubview가 호출 됨 setNeedsDisplay - 호출 시 needsDisplay flag가 YES로 변경. - 호출 즉시 뷰가 적용되는 것이 아니라 다음 run loop에 뷰 변경이 적용 - 여러.. 더보기
주위 밝기에 따라 piezo 스피커 음 변경 준비물 - 조도센서 1개 - piezo 스피커 1개 - 10㏀ 저항 1개 코드 const int lightInputPin = A0; const int piezoOutputPin = 8; void setup() { } void loop() { int light = analogRead(lightInputPin);//0(0V) ~ 1023(5V) int hertz = map(light, 0, 1023, 31, 4978); tone(piezoOutputPin, hertz, 100); delay(100); noTone(piezoOutputPin); delay(200); } 영상 더보기
주위 밝기에 따라 LED 빛 바꾸기 준비물 - 조도센서 1개 - LED 1개 - 10㏀ 저항 1개 - 220Ω 저항 1개 코드 const int lightInputPin = A0; const int ledOutputPin = 9; void setup() { } void loop() { int light = analogRead(lightInputPin);//0(0V) ~ 1023(5V) //p1~p2의 p0값을 p3~p4값으로 맵핑 //ex)0~1023의 light값 255~0으로 맵핑 int ledLight = map(light, 0, 1023, 255, 0); analogWrite(ledOutputPin, ledLight); } 영상 알게된 점 - 조도센서는 빛이 강할수록 약해지고, 빛이 약할수록 강해지는 저항을 통한 전류를 측정하는 센.. 더보기
미니 디지털 피아노 준비물 - piezo 스피커 1개 - 버튼스위치 3개 - 10㏀ 저항 3개 코드 //input Pin 배열 int inputArr[] = {2, 3, 4}; int inputArrSize = sizeof(inputArr)/sizeof(int); //음 배열 int soundArr[] = {262, 294, 330}; int soundArrSize = sizeof(soundArr)/sizeof(int); //piezo 출력 핀 const int outputPiezoPin = 8; void setup() { for(int i=0 ; i< inputArrSize ; i++) { pinMode(inputArr[i], INPUT); } } void loop() { for(int i=0 ; i< soundArrSi.. 더보기