이번주에 배운 것들
1.
프로토타이핑
2.
카메라 UIImagePickerController
3.
데이터베이스 (코어데이터, SQLite)
프로젝트 진행 상황
•
카메라 기능
1. 카메라 촬영기능
2.
사진 라이브러리에 접근할수 있는기능
•
이미지 화면을 구성하여 상품 검색뷰 제작
◦
OCR이 잘안되서 고화질로 크롤링 우회 > 법적인 문제 여부 체킹
◦
크롤링이 아닌 이미지를 모아서 해야할듯?
▪
구글 이미지 검색하여 데이터 수집중 > 한품목 5가지 100개정도 표준화
공유할 사항
•
문혁준
데이터 경쟁에 대해서 이해가 되지 않습니다.
•
프로젝트 진행상황 멘토링 체크
•
수비님
◦
카메라 기능 + 사진 라이브러리 접근 등 기능 추가 완료!
•
태훈님 & 회원님
◦
회원님과 상품 검색뷰 구현 완료
◦
이미지 모델링 진행중!
•
혁준님
◦
수비님과 “카메라 기능 + 사진 라이브러리 접근 등 기능 추가 완료!”
•
회원님
◦
상품 검색뷰 구현 완료
•
남은 Task
◦
모델링 → 연동
◦
앱 스토어에 테플 업로드
◦
앱 심사 및 배포
•
이번주부터 실습팀 배정!
◦
이번주는 아이디어 단계
•
생각해본 개선 사항들
◦
카메라로 촬영하는동안 해당 기능 제공!
◦
햅틱 기능
멘토링
•
Race Condition
◦
데이터 경쟁
◦
하나의 공유 자원에 여러 프로세스 혹은 스레드가 동시에 접근할때 발생할 수 있는 CS 문제!
◦
if 초코렛 ≠ 0 {
(
// 태훈님이 입장해서
초코렛을 1개 가져감!
)
초코렛 1개 가져오기 수행!
}
◦
방 하나에 여러 스레드가 동시에 접근할 수 있어서 발생함!
import Foundation
var counter = 0
let counterQueue = DispatchQueue(label: "counter", attributes: .concurrent)
// 공통 기능!
func plusCounter() {
counterQueue.sync(flags: .barrier) {
for _ in 0..<1000 {
let currentValue = counter
// 1 스레드가 500이라는 값을 인지 -1
// 2 스레드가 501이라는 값을 인지 -2 --> 500 값 인지
// 1스레드가 501로 변경! 하고 counter에도 501을 넣어줘야함! -3
// 2스레드가 502로 변경! 하고 counter에도 502을 넣어줘야함!
// 2스레드가 501로 변경! 하고 counter에도 501을 넣어줘야함!
counter = currentValue + 1
}
}
// count == 1000이 증가되는 상황
}
let queue = DispatchQueue(label: "apple", attributes: .concurrent)
DispatchQueue.global().async {
queue.async {
plusCounter()
}
}
DispatchQueue.global().async {
queue.async {
plusCounter()
}
}
DispatchQueue.global().async {
queue.async {
plusCounter()
}
}
DispatchQueue.global().async {
queue.async {
plusCounter()
}
}
// 4000
// 3980
func test() {
DispatchQueue.global().asyncAfter(deadline: .now() + 10) {
print("\(counter)")
}
}
JavaScript
복사
•
struct Car // Entity {
name: String // Attribute
age: Int // Attribute
}
모델 → 객체
context → 객체를 다루는 매니저
- 객체의 속성에 값을 넣을 수도 있고 객체 인스턴스 생성/삭제/업데이트
var car = Car(name: “green”, age: 3)
car.name = “greeeeen”
→ NS → NeXT Step
NSString
float CGFloat
•
랩 팀 아이디어 피드백!
•
간단하게 핀치줌에 대한 레퍼런스 제공하기!!!