Ray Wenderlich
-
Ch8. Measuring & Boosting PerformanceRay Wenderlich/CoreData 2022. 10. 31. 00:41
Measure, change, verify 개선을 위해 아래 3단계 사이클을 반복하자. [Measure] → [Change] → [Verify] → [Measure] 퍼포먼스를 체크하기 위해 Guage, Instrument, XCTest framework를 사용할 수 있다. 퍼포먼스를 향상시키는 코드를 작성한다. 다시 퍼포먼스를 측정하여 개선이 되었는지 확인한다. 이를 반복한다. 이 챕터에서 사용한 퍼포먼스 개선 NSManagedObject에서 불필요하게 큰 Binary를 Fetch하고 있다면 별도의 Entity로 분리하자. NSFetchRequest의 fetchBatchSize를 활용하여 한 번에 fetch하는 Object의 수를 줄여보자. NSExpression을 활용하여 필요한 데이터만 fetch하..
-
Ch7. Unit TestingRay Wenderlich/CoreData 2022. 10. 31. 00:41
Core Data stack for testing 좋은 유닛테스트는 FIRST를 따른다. Fast Isolated Repeatable Self-verifying Timely 이 샘플 프로젝트의 테스트 타겟은 서비스를 위한 앱 타겟과 다른 AppDelegate를 사용하도록 셋팅되어 있다. 코어 데이터는 디스크에 데이터를 Write한다. 하지만 이는 Isolated하지 않다. 또한 데이터가 영구적이기에 한 번 데이터를 Write하면 다른 테스트에 영향을 줄 수 있다. Repeatable하지 않다. 그렇다면 데이터를 Write하고 Delete해주면 어떨까? 이는 Fast하지 않다. 이를 해결하기 위해 in-memory SQLite store를 사용한다. class TestCoreDataStack: CoreDa..
-
Ch6. Versioning & MigrationRay Wenderlich/CoreData 2022. 10. 27. 22:41
마이그레이션이 필요한 아래 시나리오를 구현해본다. [노트를 작성할 수 있는 앱] 텍스트를 작성할 수 있다. 이미지를 추가할 수 있도록 변경. (Lightweight migration) 이미지를 여러장 추가할 수 있도록 변경. (Manual migration using Mapping model) 이미지가 아닌 다른 리소스도 첨부할 수 있도록 변경. (Manual migration using Mapping model and subclass of NSEntityMigrationPolicy) 연속적이지 않은 버전의 마이그레이션을 지원하기 Ex) v2 → v4 The migration process 마이그레이션은 3단계로 나뉜다. First, Core Data copies over all the objects f..
-
Ch5. NSFetchedResultsControllerRay Wenderlich/CoreData 2022. 10. 27. 22:34
NSFetchedResultsController의 세 가지 장점 Section Cache Monitoring 이전 챕터에서 봤듯, CoreData는 UITableView와 잘 어울린다. NSFetchedResultsController를 사용하면 UITableView와의 조합을 더 잘 활용할 수 있다. NSFetchedResultsController는 NSFetchRequest를 감싸며 FetchResult를 내부에 갖고 있다. 그래서 fetch하는 메소드의 리턴타입이 Void다. lazy var fetchedResultsController: NSFetchedResultsController = { let fetchRequest: NSFetchRequest = Team.fetchRequest() let zo..
-
Ch2. NSManagedObject SubclassesRay Wenderlich/CoreData 2022. 10. 27. 22:33
Modeling your data XCode Editor에서 attribute를 원하는대로 추가할 수 있다. 원하는 이름과 타입을 선언하면 된다. 타입은 매우 종류가 많다. Boolean, Date, Double, String, Integer16, Integer32, Integer64, UUID, URI 등 그리고 Binary Data도 있다. (blob형태로 저장하는 기능이 지원됨) 그런데 바이너리를 저장했다가는 이 엔티티에 접근할 때마다 바이너리 데이터가 메모리에 올라가기 때문에 비효율적이다. XCode는 이를 방지하고자 Attributes Inspector에서 Allows External Storage옵션을 제공한다. Allows External Storage → 데이터베이스에 바로 파일을 저장하지..
-
Ch13. StashesRay Wenderlich/Mastering Git 2021. 9. 21. 16:48
git stash cd .git/refs/ cat stash # b6132364bdae71e8a5483e42584257aadbe49827 git cat-file -p b61323 tree 1a79fa3410189b40dccb6b36f7eda8725c768627 parent 870aea10aa51d9103e6f6e37217b2cd077dd22bb parent 68cde8e6fde76e21a7a93637f0bf5dbc3b36c242 author Chris Belanger 1556018137 -0300 committer Chris Belanger 1556018137 -0300 WIP on master: 870aea1 Merge branch 'xReadmeUpdates' Git은 Stash를 생성할때 Commi..
-
Ch12. Merge ConflictsRay Wenderlich/Mastering Git 2021. 8. 23. 00:58
What is a merge conflict? Git은 Merge를 할 때, Longest Common Subsequence(LCS)를 사용한다. 먼저 내가 수정한 파일과 Common ancestor의 변경사항을 비교하여 공통부분을 찾는다. 그 다음, Merge할 브랜치의 파일을 Common ancestor와 비교하여 공통부분을 찾는다. Git은 이 방식으로 LCS를 찾아낸 뒤 비교해본다. "What has changed between the common ancestor and this new file?" 그 다음, "Now, of those changes in each pair of files, are there any sets of lines that have changed differently be..
-
Ch11. How Does Git Actually Work?Ray Wenderlich/Mastering Git 2021. 8. 23. 00:57
Git은 SHA-1해쉬 값으로 모든 Commit을 참조한다. Dissecting the commit git log -5 --oneline f8098fa (HEAD -> master, origin/master, origin/HEAD) Merge branch 'clickbait' with changes from crispy8888/clickbait d83ab2b (crispy8888/clickbait, clickbait) Ticked off the last item added 5415c13 More clickbait ideas fed347d (from-crispy8888) Merge branch 'master' of https://www.github.com/belangerc/ideas ace7251 Addi..