WWDC 비디오 “iOS에서 참여 UI 구현”에 설명 된대로 일부 새로운 iOS 7 기능을 사용하고 일부 이미지 효과를 사용하고 있습니다. 세션의 소스 코드 내에서 흐림 효과를 만들기 위해 UIImage
UIKit을 가져 오는 범주를 통해 다음과 같이 확장되었습니다.
@import UIKit;
다른 세션 비디오에서 이것에 대해 뭔가를 봤지만 찾지 못했습니다. 이 사용 시점에 대한 배경 정보를 찾고 있습니다. Apple 프레임 워크에서만 사용할 수 있습니까? 이 컴파일러 지시문을 사용하면 이전 코드로 돌아가 업데이트 할만큼 충분한 이점이 있습니까?
답변
Modules 또는 “semantic import” 라는 새로운 기능 입니다. WWDC 2013 비디오에는 세션 205 및 404에 대한 자세한 정보가 있습니다 . 미리 컴파일 된 헤더를 더 잘 구현합니다. iOS 7 및 Mavericks의 시스템 프레임 워크와 함께 모듈을 사용할 수 있습니다. 모듈은 프레임 워크 실행 파일과 함께 패키징되며 헤더이며보다 안전하고 효율적으로 선전됩니다 #import
.
사용의 가장 큰 장점 중 하나는 @import
것입니다 이 자동으로 이루어집니다, 프로젝트 설정에서 프레임 워크를 추가 할 필요가 없습니다 . 즉, 더하기 버튼을 클릭하고 프레임 워크 (골든 도구 상자)를 검색 한 다음 “Frameworks”그룹으로 이동하는 단계를 건너 뛸 수 있습니다. 암호화 된 “링커 오류”메시지에서 많은 개발자를 구할 수 있습니다.
실제로 @import
키워드 를 사용할 필요는 없습니다 . 당신이 선택 된 경우 모듈을 사용하는 모든 #import
및 #include
지침은 사용하는 매핑됩니다 @import
자동으로. 즉, 소스 코드 (또는 다른 곳에서 다운로드 한 라이브러리의 소스 코드)를 변경할 필요가 없습니다. 모듈을 사용하면 특히 PCH를 잘 사용하지 않았거나 프로젝트에 작은 소스 파일이 많은 경우 빌드 성능도 향상됩니다.
모듈은 대부분의 Apple 프레임 워크 (UIKit, MapKit, GameKit 등)를 위해 사전 구축되었습니다. 직접 만든 프레임 워크와 함께 사용할 수 있습니다. Xcode에서 Swift 프레임 워크를 생성하면 자동으로 생성되며 Apple 또는 타사 라이브러리에 대해 직접 “.modulemap”파일을 직접 생성 할 수 있습니다 .
코드 완성을 사용하여 사용 가능한 프레임 워크 목록을 볼 수 있습니다.
Xcode 5의 새 프로젝트에서는 기본적으로 모듈이 활성화되어 있습니다. 이전 프로젝트에서이를 활성화하려면 프로젝트 빌드 설정으로 이동하여 “모듈”을 검색하고 “모듈 사용”을 “예”로 설정하십시오. “링크 프레임 워크”도 “예”여야합니다.
Xcode 5와 iOS 7 또는 Mavericks SDK를 사용해야하지만 이전 OS (예 : iOS 4.3 등) 용으로 릴리스 할 수 있습니다. 모듈은 코드 작성 방법이나 소스 코드를 변경하지 않습니다.
WWDC 슬라이드에서 :
- 프레임 워크의 완전한 의미 설명을 가져옵니다.
- 헤더를 파싱 할 필요가 없습니다
- 프레임 워크 인터페이스를 가져 오는 더 좋은 방법
- 이진 표현을로드
- 사전 컴파일 된 헤더보다 더 유연
- 지역의 매크로 정의의 효과에 면역 (예
#define readonly 0x01
)- 기본적으로 새 프로젝트에 사용
모듈을 명시 적으로 사용하려면 :
교체 #import <Cocoa/Cocoa.h>
로@import Cocoa;
이 표기법으로 하나의 헤더 만 가져올 수도 있습니다.
@import iAd.ADBannerView;
Xcode에서 서브 모듈이 자동 완성됩니다.
답변
Objective-C를 사용한 Learning Cocoa 책에서 찾을 수있는 좋은 답변 (ISBN : 978-1-491-90139-7)
모듈은 파일과 라이브러리를 프로젝트에 포함하고 연결하는 새로운 수단입니다. 모듈의 작동 방식과 그 이점을 이해하려면 Objective-C의 역사와 #import 문을 다시 살펴 보는 것이 중요합니다. 사용할 파일을 포함 할 때마다 일반적으로 다음과 같은 코드가 있습니다.
#import "someFile.h"
또는 프레임 워크의 경우 :
#import <SomeLibrary/SomeFile.h>
Objective-C는 C 프로그래밍 언어의 상위 집합이므로 #import #include
문 은 C의 진술을 약간 수정 한 것 입니다. #include 문은 매우 간단합니다. 컴파일하는 동안 포함 된 파일에서 찾은 모든 것을 코드에 복사합니다. 때때로 심각한 문제가 발생할 수 있습니다. 예를 들어, 두 개의 헤더 파일이 상상 : SomeFileA.h
및 SomeFileB.h
; SomeFileA.h
포함SomeFileB.h
하고 SomeFileB.h
포함 SomeFileA.h
합니다. 이것은 루프를 만들고 코임 필러를 혼동시킬 수 있습니다. 이를 처리하기 위해 C 프로그래머는 이러한 유형의 이벤트가 발생하지 않도록 가드를 작성해야합니다.
를 사용할 #import
때이 문제에 대해 걱정하거나 헤더 가드를 작성하지 않아도됩니다. 그러나 #import
여전히 영광스러운 복사 후 붙여 넣기 작업이므로 다른 작지만 여전히 매우 위험한 문제 (예 : 자신의 코드에서 다른 곳에서 선언 한 내용을 덮어 쓰는 포함 된 파일)간에 컴파일 시간이 느려집니다.
모듈은이 문제를 해결하려는 시도입니다. 더 이상 소스 코드로 복사하여 붙여 넣기가 아니라 필요할 때 언제 어디서나 소스 코드로 가져올 수있는 포함 된 파일의 직렬화 된 표현입니다. 모듈을 사용하면 코드는 일반적으로 #include 또는를 사용하는 것보다 더 빠르게 컴파일되고 안전 #import
합니다.
프레임 워크 가져 오기의 이전 예제로 돌아 가기 :
#import <SomeLibrary/SomeFile.h>
이 라이브러리를 모듈로 가져 오려면 코드가 다음과 같이 변경됩니다.
@import SomeLibrary;
이는 SomeLibrary 프레임 워크를 프로젝트에 자동으로 연결하는 Xcode의 추가 보너스를 제공합니다. 모듈을 사용하면 실제로 필요한 구성 요소 만 프로젝트에 포함시킬 수 있습니다. 예를 들어 AwesomeLibrary 프레임 워크에서 AwesomeObject 구성 요소를 사용하려면 일반적으로 한 조각 만 사용하기 위해 모든 항목을 가져와야합니다. 그러나 모듈을 사용하면 사용하려는 특정 객체를 가져올 수 있습니다.
@import AwesomeLibrary.AwesomeObject;
Xcode 5로 작성된 모든 새 프로젝트의 경우 기본적으로 모듈이 활성화되어 있습니다. 이전 프로젝트에서 모듈을 사용하려면 (그리고 실제로해야 함) 프로젝트의 빌드 설정에서 모듈을 활성화해야합니다. 일단 그렇게 하면 걱정없이 코드의 #import
및 @import
문을 함께 사용할 수 있습니다 .
답변
현재 내장 된 시스템 프레임 워크에서만 작동합니다. #import
apple처럼 사용하는 경우 여전히 UIKit
앱 위임에서 프레임 워크를 가져 오면 프레임이 교체되고 (모듈이 켜져 있고 시스템 프레임 워크로 인식되는 경우) 컴파일러는 헤더 파일을 가져 오지 않고 모듈 가져 오기로 다시 매핑합니다 . 따라서 #import
어쨌든 가능한 경우 모듈 가져 오기로 변환 된 것과 동일합니다.
답변
XCode 7.xa부터 clang 모듈을 사용할 때 많은 경고가 나오는 것처럼 보입니다. CLANG_ENABLE_MODULES
답변
모듈을 사용하면 몇 가지 이점이 있습니다. 모듈 맵을 만들지 않으면 Apple의 프레임 워크에서만 사용할 수 있습니다. @import
는 파일에 추가 될 때 .pch
컴파일 프로세스를 조정하는 방법 인 사전 컴파일 헤더 파일과 약간 비슷합니다 . 또한 이전 방식으로 라이브러리를 추가 할 필요가 없습니다 @import
. 실제로 사용하는 것이 훨씬 빠르고 효율적입니다. 그래도 좋은 참고 자료를 찾고 있다면 이 기사 를 읽는 것이 좋습니다 .
답변
역사:
#include => #import => .pch => @import
#include vs #import
.pch-사전 컴파일 된 헤더
모듈- @import
Product Name == Product Module Name
@module
선언은 빌드 시간 을 단축시키는 사전 컴파일 된 프레임 워크 바이너리 를로드하도록 컴파일러에 지시 합니다 . 모듈 식 프레임 워크에 포함 된 .modulemap
정보
Xcode 프로젝트에서 모듈 기능이 활성화되어 #include
있고 #import
지시문이 자동으로 변환되어 @import
모든 이점이있는 경우
답변
