2015-02-07 7 views

답변

3

동적 프레임 워크와 정적 프레임 워크는 모두 2 진수와 다른 것들을 포함하는 묶음입니다. 바이너리는 동적 라이브러리 또는 정적 라이브러리라고합니다.

바이너리는 컴파일 한 후 코드가 무엇인지, 함수, 클래스, 메소드가 바이너리 형식이되어 기호라고합니다.

프로젝트를 빌드 할 때.

코드가 바이너리로 작성되므로 MyProjectBinary으로 전화를 걸자. 프로젝트가 정적 라이브러리에 링크 된 경우 MyProjectBinary를 빌드 한 후 링커가 MyProjectBinary의 심볼을 검사하고 정적 라이브러리의 일부를 사용하는 경우 (예 : 정적 라이브러리의 클래스 사용) 링커가 모든 심볼을 클래스에 관련시키고 MyProjectBinary에 합치십시오. 그래서 얼마나 많은 정적 라이브러리를 사용 하든지 하나의 빌딩 결과 (MyProjectBinary) 만 얻을 수 있습니다.

동적 라이브러리에 링크하면 MyProjectBinary이 실행 중일 때 링커에게 적절한 위치에 동적 라이브러리가 있음을 알리는 것입니다. 동적 라이브러리는 사실 마술이 아닙니다. 오랫동안 사용 해왔습니다. Apple에서 제공하는 모든 프레임 워크는 동적 라이브러리입니다. 그들은 앱이 장치/시뮬레이터에서 실행될 때 존재한다는 것을 보장합니다.

프로젝트가 MyDynamicLibrary이라는 동적 라이브러리에 연결되어 있다고 가정합시다. 프로젝트를 빌드 할 때 먼저 MyProjectBinary이 여전히 정적 라이브러리를 사용하는 것과 동일하게 생성됩니다. 그런 다음 링커는 MyProjectBinary에 정보를 추가하고 런타임에 "MyDynamicLibrary"를 찾을 위치를 표시합니다. 프로젝트 실행하는 경우 MyDynamicLibrary에서 아무것도 MyProjectBinary

에 추가되지 않습니다 : 정적 라이브러리를 사용하여 프로젝트에 대한

을 필요로하는 모든 코드가 내부 MyProjectBinary 때문에, 특별한 일이 아무것도, 그냥 실행됩니다. 이 MyProjectBinary에 대한 다음 MyDynamicLibrary 발견하면 코드가 MyDynamicLibrary에있는 함수를 호출하는 동적 라이브러리를 사용하여 프로젝트에 대해서는

, 시스템은, MyProjectBinary에 저장된 정보에 따라 MyDynamicLibrary을 찾으려고, 함수가 같이 사용된다 MyProjectBinary. MyDynamicLibrary을 찾을 수 없다면 오류가 발생하고 앱이 종료됩니다.

iOS 8 용 동적 라이브러리가 필요한 이유는 무엇입니까?

iOS8 이전 버전의 앱에는 실행 바이너리가 하나만있을 수 있으므로 정적 라이브러리 사용은 괜찮습니다.

하지만 iOS 8이 출시되면 하나의 앱에서 여러 실행 가능한 바이너리를 제공 할 수 있으며 추가 바이너리는 확장 프로그램의 실행 가능 바이너리입니다. 이것은 여러 실행 가능한 바이너리에 의해 사용되는 코드가 있고 정적 라이브러리를 사용하는 경우 동일한 심볼이 모든 실행 파일에 복사되므로 더 많은 공간이 필요하므로 문제가 발생합니다.동적 라이브러리가 유용 할 때입니다. 동적 라이브러리에 이러한 코드를 넣을 수 있으며 앱용 동적 라이브러리 복사본 하나만 제공 할 수 있습니다. 앱과 확장 프로그램은 동일한 동적 라이브러리를 사용할 수 있습니다.