Date
- Locale 이란?
- 사용자의 언어, 국가뿐 아니라 사용자 인터페이스에서 사용자가 선호하는 사항을 지정한 매개 변수의 모임
import RealmSwift
class DictionaryRealm: Object {
@objc dynamic var date = ""
var todoList = List<Todo>() // Realm 은 배열 선언을 할때 List로 해야한다, NSArray is not supported as an RLMObject property
}
class Todo: Object {
@objc dynamic var title = ""
@objc dynamic var contents = ""
}
let dataToSave = DictionaryRealm() // 저장 할 모델 선언
dataToSave.date = "today" // 데이터 set
let todo = Todo() // 추가할 todo set
todo.title = "title"
todo.contents = "contens"
dataToSave.todoList.append(todo)
try! realm.write { // realm.write로 저장
realm.add(dataToSave) // realm.add()로 데이터 추가
}
let realm = try! Realm() // realm 객체 선언
let savedData = realm.objects(DictionaryRealm.self).filter("date='today'") // realm 오브젝트 형태로 filter에 맞게 불러옴
saveData.isEmpty // 데이터 비어있는지 확인
saveData.first.todoList // todoList 확인
try! realm.write {
realm.delete(item)
}
try! realm.write {
updateItem.titlt = "newTitle"
}
ContentMode는 enum이다.
정리
Animation 띄우기
Progress Image
url 다운로드 세팅
시작, 끝, 완료를 구분하기 위한 enum 설정
ProgressView Play
startDownLoad()
endDownload()
URLSessionDownloadDelegate
private func progress(to progress: CGFloat) { let progressRange = ProgressKeyFrames.end.rawValue - ProgressKeyFrames.start.rawValue // set range let progressFrame = progressRange * progress // set frame with progress let currentFrame = progressFrame + ProgressKeyFrames.start.rawValue // set currentFrame
progressView?.currentFrame = currentFrame // updateFrame
}
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { let percentDownloaded:CGFloat = CGFloat(totalBytesWritten) / CGFloat(totalBytesExpectedToWrite) // 현재 다운로드 퍼센트 계산 DispatchQueue.main.async { self.progress(to: percentDownloaded) // 메인큐로 progress 함수로 넘겨줌 } }
func urlSession(_ session: URLSession, downloadTask: URLSessionDownLoadTask, didFinishDownloadingTo location: URL) { DispatchQueue.main.async { self.endDownload() // 다운로드 완료 } }
* <security-constraint>
<web-resource-collection>
<web-resource-name>Restricted methods</web-resource-name>
<url-pattern>/*</url-parrern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
주기
앱 구성요소 보기
앱 생명주기
Self
Super
상속
superclass
superview
UIImage
UIImageView 생성
프레임 사이즈 출력
파일 경로 가져오기
UIButton 생성
UIButtonTypeRoundedRect
UIButtonTypeCustom
Event
addUnaryOperation("루트") { [self weakSelf = self] in
weakSelf?.display.textColor = UIColor.redColor()
return sqrt($0)
}
멀티 쓰레딩이란, 일을 처리하는 별도의 쓰레드를 갖추는 것이다.
싱글코어프로세서에서도 시분할 방식으로 문맥교환을 통해 여러 쓰레드를 작동시킨다
IOS에서 멀티 쓰레딩은 queue와 같다
이 큐는 IOS 함수들을 포함하고 있다 (대부분 여기에 들어간 함수는 클로져로 되어 있다)
큐는 여러개가 존재할 수 있고 스시템은 각각의 큐에서 꺼내서 각각의 쓰레드에서 동작시킨다
시리얼큐(serial)는 큐에 있는 첫 번째 테스크가 끝나면 그 다음 테스크는 꺼내는 방식의 큐이다.
병렬큐(concurrent)는 큐에서 테크를 꺼내 처리하는 동안 놀고있는 다른 쓰레드에서 다음 것들을 바로 처리하는 방식
Main Queue
Other Queue
큐에 뭔가를 집어넣는 방법
The Main Queue
The Other Queue
dispatch_get_global_queue(<one of the QOS>, 0) // 0 is a "reserved for future" 언젠가를 위해 남겨둔다는 의미로 항상 0으로 세팅
User Create Queue
GCD(Grand Central Dispatch)
추상적인 API
IOS API관점에서 멀티 쓰레딩
뷰 컨트롤러는 라이프 라이클을 가지고 있음
인스턴스 생성과 준비 그리고 Outlet 설정이 끝나면 viewDidLoad 가 불린다.
viewDidLoad
viewWillAppear
viewDidAppear
viewWillDisappear
viewDidDisappear
Geometry changed
viewWillTrasitionToSize
didReceiveMemoryWarning
awakeFromNib