2012-06-08 4 views
0

내 프로젝트에서 후자를 사용하는 동안 예제 코드에서 첫 번째 main.m을 사용하는 클래스가 있기 때문에 조금 혼란 스럽다. 내 applicationDidFinishLaunching 함께 클래스 인스턴스를 점점 어려움을 많이 겪고 있고 이러한 다른 main.m 파일을 범인이 될 것 같아요. 내 프로젝트와 예제 프로젝트 간의 .xib 파일은 Main Nib 이름의 .plist 설정과 동일합니다. 대의원은 모두 최대 연결되어 제대로이 두 main.m의 차이점은 무엇입니까?

#import <UIKit/UIKit.h> 
#import "MidiTestingAppDelegate.h" 

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([MidiTestingAppDelegate class])); 
    } 
} 

그리고

#import <UIKit/UIKit.h> 

int main(int argc, char *argv[]) 
{ 
#if __has_feature(objc_arc) 
    @autoreleasepool 
    { 
     int retVal = UIApplicationMain(argc, argv, nil, nil); 
     return retVal; 
    } 
#else 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
#endif 
} 

내가 전 바로 앱 위임로 이동한다고 가정 후자의 부하를 직접 UIApplication 동안? 그 맞습니까?

+1

두 번째 컴파일 시간 브랜치가 있습니다. 실제로 컴파일 될 분기는 ARC가 사용되는지 여부에 따라 다릅니다. –

+0

전체 프로젝트에 흩어져 있지 않은 수표가 필요합니다. – Joe

+0

아크 체크는 다운로드 한 전체 수업에 흩어져 있습니다. 그것은 문제가 될 것인가? – frankie

답변

0

두 번째 예는 나쁜 형식입니다. @autoreleasepool은 ARC가 아닌 프로젝트에서 사용할 수 있으며 실제로는 자신의 풀을 만드는 것보다 빠릅니다 (link).

4

여기에는 많은 잘못된 정보가 있습니다.

먼저 Xcode의 최신 버전이 있다고 가정하면 첫 번째 버전 만 있으면됩니다.

@autoreleasepool 구문 은 ARC가 아닌 프로젝트에서 작동합니다. 컴파일러는이 모든 것을 파악하고 두 경우 모두 적절한 코드를 생성합니다.

두 번째 코드는 기능 감지 매크로 (__has_feature)를 사용하여 ARC 사용 여부에 따라 새 @autoreleasepool 구문과 기존 NSAutoreleasePool 풀 만들기 방법을 결정합니다. 새 구문을 사용할 수없는 Xcode의 이전 버전을 실행하는 경우에만 두 번째 코드를 사용해야합니다.

+0

+1, 이것이 왜 받아 들여지지 않은 대답입니까? 그는 문자 그대로 어쨌든이 것을 표절했습니다. – CodaFi

관련 문제