본문 바로가기
프로그래밍 놀이터/iOS

[iOS] NS_AVAILABLE_IOS  와 NS_DEPRECATED_IOS 의 의미는?

by 돼지왕 왕돼지 2017. 6. 17.
반응형

 [iOS] NS_AVAILABLE_IOS  와 NS_DEPRECATED_IOS 의 의미는?


http://iosdevelopertips.com/best-practices/eveything-you-need-to-know-about-ios-and-os-x-deprecated-apis.html


#endif, #if, API, App, Apple, backward compatibility, Crash, depreated, deprecated version, deprecatedapi, introduced version, IOS, ios deprecated, ios introduced, IPHONE_OS_VERSION_MIN_REQUIRED, Library, newapi, ns_available, ns_available_ios, ns_deprecated, ns_deprecated_ios, OSX, osx deprecated, osx introduced, respondsToSelector, Warning, [iOS] NS_AVAILABLE_IOS  와 NS_DEPRECATED_IOS 의 의미는?, 접미어



-

NS_AVAILABLE_IOS(5_0) 


위의 접미어는 이 함수는 iOS 5.0 에 새로 들어와서 이 버전 이후에서만 유효하다는 것을 이야기한다.

만약 이 함수가 iOS 5.0 이하 버전에서 불린다면 crash 가 발생한다.



-

NS_DEPRECATED_IOS(2_0, 6_0)


위의 접미어는 2개의 버전을 표시하고 있다.

첫번째 버전은 introduced version 이고, 두번째 버전은 deprecated version 이다.



-

NS_AVAILABLE(10_8, 6_0)


위의 접미어는 IOS 라는 구문이 빠진 녀석으로, OSX 와 IOS 모두 사용 가능한 API 이다.

OSX 10.8 부터, 그리고 IOS 는 6.0 부터 도입된 녀석임을 의미한다.



-

NS_DEPRECATED(10_0, 10_6, 2_0, 4_0 )


NS_AVAILABLE 과 마찬가지로 순서대로 OSX intro, OSX deprecated, IOS intro, IOS deprecated version 을 나타낸다.



-

Deprecated 된 함수들에는 어떻게 대응해야 할 것인가? - App


대부분의 deprecated api 들은 iOS 버전 업이 되어도 실제로 사라지지는 않았다.

그러나 사라진 녀석들도 있기는 있다는 뉘앙스의 글들이 있고, Apple 이 갑자기 backward compatibility 를 지원하지 않겠다고 선언하는 경우를 대비하여

NSObject 에 있는 respondsToSelector: 함수를 먼저 call 하고 넘어가는 것이 좋아보인다.

if ([object respondsToSelector:@selector(deprecatedApi:)]{

[object deprecatedApi:];

} else{

[object newApi];

}



-

Deprecated 된 함수들에는 어떻게 대응해야 할 것인가? - Library 


Library 는 사용자의 빌드 환경을 알 수 없기 때문에 App 과 같은 방식으로 작성하면 warning 이 발생하기 쉽다.

그래서 아래와 같이 정의해서 사용해야 한다.


#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0

if ( [object respondsToSelector:@selector(deprecatedApi:)] ){

[object deprecatedApi:];

} else

#endif

{

[object newApi];

}




반응형

댓글