티스토리 뷰
얼마전 누가 이것의 차이점에 대해서 문의를 하는적이 있어서 적어본다.
NSCoding
이것은 객체의 아카이빙과 관련된 부분으로 생각하면 되는데 만약 다음과 같이 구현을 한다고 예를 들었을 경우
1 | [NSKeyedArchiver archiveRootObject:person toFile:@"test"]; | cs |
당연스럽다는듯이 에러가 발생한다... 에러라고 표현하고 죽는다고 말한다.
Foundation에서 제공하는 기본적인 클래스인지 NSString, NSArray, NSDictionary 등의 클래스를 위처럼 사용하려고 하였을 경우에는 에러가 발생하지 않는다.
이유는 당연스럽게 NSCoding을 구현하여 놓았기 때문. 그러면 우리가 이것을 사용하고 싶다면 구현을 하여 주어야 하는거임.
1 2 3 4 5 6 7 8 9 10 11 12 13 | @interface Test ()<NSCoding> @end @implementation Test -(void)encodeWithCoder:(NSCoder *)aCoder{ // encode code를 넣어 주어야함. } - (instancetype)initWithCoder:(NSCoder *)aDecode { // decode code를 넣어 주어야함. } @end | cs |
NSCopying
위에 설명한 Coding처럼 이녀석도 비슷한 역할을 하는데, 구현을 하여 주어야 한다.
정확하게는 찾아보지는 못하였지만 요즘은 zone을 사용하지 않기 때문에 문제가 발생하지 않는것으로 알고 있다. ( 이 부분은 찾아봐주세요. ^^ )
그럼 다음과 같이 개발을 하였다고 가정을 하고, Test 파일을 따로 만들어 두었슴.
1 2 | Test *test = [[Test alloc] init]; Test *testCopy = [test copy]; | cs |
이렇게 할 경우에 당연스럽게 에러가 발생합니다. 그러면 무언가를 구현하여 주어야 하는거임.
1 2 3 4 5 6 7 8 9 10 11 | @interface Test ()<NSCopying> @end @implementation Test -(instancetype)copyWithZone:(NSZone *)zone{ return [[Test allocWithZone:zone] init]; } @end | cs |
그럼 즐코딩 되세용
'Mobile > iOS' 카테고리의 다른 글
[iOS/Swift4] KVO 사용하기 (0) | 2017.10.10 |
---|---|
[iOS] Code Sign / Provisioning (0) | 2017.10.10 |
[iOS/Swift] Singleton 사용하기 (0) | 2017.09.27 |
[iOS/Swift] Swift3 GCD 조금 더... (0) | 2017.09.27 |
[iOS] Reactive Programming 보기 좋은 링크 (0) | 2017.08.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Kotlin
- docker
- rxswift
- ubuntu
- enum
- go
- windows10
- android
- SWIFT
- Spring
- Windows
- tomcat
- ios
- intellij
- MySQL
- Python
- Codable
- php
- github
- Xcode
- Java
- Gradle
- git
- Linux
- cocoapods
- CentOS
- golang
- war
- centos8
- nodejs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함