문제제기

Firebase를 이용하여 채팅어플을 클론코딩하던 와중에 데이터모델을 NSObject를 이용하고 이에 대한 setValuesForKeys메소드를 사용하였다, 우리는 왜 NSObject를 이용하였으며 이에 대한 메소드에 대해서 공부해보는 시간을 가져보려고한다

문제에러

  1. NSObject에 setValuesForKeys메소드를 사용하였을때의 문제

-> 과거에 클론코딩을 하던 와중에 NSObject로 선언된 모델에 메소드를 사용하였을때 에러가 났었다, 이는 NSObject가 Foundation라이브러리에 있는 클래스이고 이는 Objective-C와의 호완성을 위해서 위 그림처럼 @objcMembers라고 명시해주어야한다고한다(selector에 @objc와 비슷한거같음)

문제해결

구글링도 해보고 애플문서도 보면은 대체적으로 하는말들이 Objective-C에서 클래스를 구현할때 Swift에서는 아무런 상속도 받지않는 클래스를 만들어도 상관이 없지만 전자에선 NSObject를 상속해야하고 NSObject는 대부분의 Objective-C에서의 루트클래스라고 나와있다
-> 근데 사실 위의 애기는 와닿지가 않음... 솔직히 다 똑같은 말만 하는거같고

---찾아보니 이해하는데 있어서 괜찮은 문구가 있어서 가져와보았다

보통은 프로그램에서 런타임 시스템 기능을 직접 사용하지 않는다.
이런 기본 기능은 루트 클래스인 NSObject 에 있는 메서드로 제공된다.
다시 말해 루트 클래스는 런타임 시스템에 대한 인터페이스 역할이라고 할 수 있다

출처: https://aroundck.tistory.com/4789 [돼지왕 놀이터]

Cocoa Touch Framework가 포함하고 있는 Framework들 중에
가장 중요하고 많이 사용하는 것이 UIKit / Foundation 임
참고로 Cocoa Touch Framework 특징은
Objective-C Runtime을 기반으로 한다
Objective-C의 최상위 클래스인 NSObject를 상속한다
Objective-C Runtime을 기반으로 하지만
Swift와 Cocoa Touch Framework는 완벽호환되기 때문에
Objective-C를 모르고 Swift만 알아도 충분히 쓸 수 있는 것

-> 결론적으로 NSObject를 클래스모델에 선언해준 이유는 Swift자체가 Objective-C런타임을 기반으로 하고있어 Objective-C의 루트클래스인 NSObject를 선언해준것일거라 추측해본다

추가...

기반 클래스(Base class = Root class)
다른 특정한 클래스를 상속하지 않은 클래스를 기반 클래스라고 한다. Objective-C 는 NSObject 와 NSProxy 라는 2개의 기반 클래스를 이용하지만, 스위프트는 전역적인 기반 클래스가 없다. 따라서 아무것도 상속하지 않고 클래스를 정의하면 그것이 바로 기반 클래스가 되는 것이다. 하지만 실질적으로 NSObject 를 상속하는게 foundation framework를 이용 할 수 있으니 상속하는게 일반적이다.

Cocoa Foundation Framework 의 일반적인 기능을 이용하려면 NSObject 를 상속하면 된다!!!

-> 그리고 UIView()와 같이 이런식으로 초기화메소드를 사용할때 이것이 NSObject의 메소드라고 하는데 이것도 한번 나와있는 정보를 찾아보자

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN