1. 샌드박싱 : 미국에서 어린아이를 보호하기 위해 모래통에서만 놀도록 하는데서 유래한 보안 모델을 말한다. ios는 기본적으로 앱 마다 별도의 파일을 생성하여 공유되지 않도록 하고, 외부로부터 들어온 접근에 대해 보호되는 영역으로 시스템이 부정적으로 조작되는 것을 막는 보안 형태를 말한다.
-예시: a, b라는 두 개의 앱이 핸드폰에 깔려 있을 때 a에서 생긴 악성 소프트웨어가 b앱의 데이터들을 모두 망쳐놓으면 문제가 생기기 때문에 샌드박싱을 이용해 해결한다.
1. nscoder : 공식문서에 따르면 "다른 개체의 보관 및 배포를 가능하게 하는 개체의 기초 역할을 하는 추상 클래스" 이다.
-개체의 보관은 "디스크에 개체 및 데이터 저장",
개체의 배포는 "서로 다른 프로세스 또는 스레드 간의 개체 및 데이터 항목 복사" 이다.
2. nscoder를 통한 데이터 인코딩
-이전에 사용하던 NsUserDefaults는 표준 데이터만을 사용하여 데이터를 저장할 수 있었다. 하지만 우리가 저장하려는 데이터는 내가 custom한 사용자 정의 유형, 객체이기 때문에 NsUserDefaults를 사용할 수 없다.
-먼저 데이터들을 인코딩하여 저장할 파일 경로와 파일 네임을 정해준다.
ex) let dataFilePath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("Items.plist")
-> 데이터를 encoding하여 Items.plist 파일에 저장할 수 있도록 하는 메서드를 만든다.
ex)
func saveItem() {
let encoder = PropertyListEncoder()
do{
let data = try encoder.encode(itemArray). //itemArray의 정보를 인코딩하여 저장하겠다.
try data.write(to : dataFilePath!)
}catch{
print("Error encoding item array, \(error)")
}
self.tableView.reloadData() //코드가 실행되는 시간 차 때문에 테이블 뷰의 셀을 다시 로딩.
}
여기서 시뮬레이터를 돌려보면 Items.plist파일에 저장은 되지만 우리의 앱에서는 저장된 정보가 나오지 않기 때문에 인코딩하여 저장한 데이터들을 다시 디코딩하여 앱에 나올 수 있도록 하는 코드가 필요하다.
decoding을 위한 메서드를 만들고 viewdidload가 실행될 때 메서드를 실행하면 끝!
ex)
func loadItems() {
if let data = try? Data(contentsOf: dataFilePath!){
let decoder = PropertyListDecoder()
do {
itemArray = try decoder.decode([Item].self, from: data)
}catch{
print("Error decoding item array, \(error)")
}
}
'개린이 이야기' 카테고리의 다른 글
모든 ios개발자가 알아야 할 중요한 사항 (0) | 2022.08.13 |
---|---|
Data base에 관하여 (0) | 2022.06.11 |
수명주기에 관하여 (0) | 2022.06.03 |
깃허브 (0) | 2022.04.19 |
커맨드 라인 (0) | 2022.04.14 |