code

@package 지시문은 Objective-C에서 무엇을합니까?

codestyles 2020. 11. 21. 14:06
반응형

@package 지시문은 Objective-C에서 무엇을합니까?


Objective-C에서 @package 지시문이 정확히 무엇에 사용되는지 아는 사람이 있습니까?

Stephen Kochan의 Programming in Objective-C 2.0에서 찾을 수있는 유일한 언급은 다음과 같습니다.

@package-64 비트 이미지의 경우 클래스를 구현하는 이미지 내 어디에서나 인스턴스 변수에 액세스 할 수 있습니다.

...

뭐? 사진과 같이 이미지와 함께 사용하는 것으로 제한됩니까? 아니면 디스크 이미지와 같은 이미지를 의미합니까?

혼란스러운 설명이고 책의 나머지 부분을 자세히 설명하지 않습니다 ....

어떤 도움이라도 굉장 할 것입니다. 감사합니다!


@packageinternal.NET 과 유사합니다 . 이는 멤버가 정의 된 프레임 워크에서만 액세스 할 수 있음을 의미합니다.

참고 : 32 비트에서는 @public.


Apple의 문서에서 이에 대해 약간 설명하지만 여기에 좀 더 자세한 내용이 있습니다.

에서 선언 된 인스턴스 변수 @package는 동일한 프레임 워크, 라이브러리 또는 실행 파일의 코드로만 액세스 할 수 있습니다. 이것은 internalC # 및 FriendVB.NET에서 가장 유사 하지만 다른 프로그래밍 언어에도 유사한 보호 체계가 있습니다 (Java에는 package-private).

예를 들어 RecipeKit.framework레시피 관리를위한 프레임 워크를 상상해보십시오 .

@interface Recipe : NSObject {
  @package;
    NSString *name;
  @private;
    NSArray *ingredients;
}
@end

@interface RecipeController : NSObject
@end

레시피 컨트롤러는 레시피 이름에 직접 액세스 할 수 있습니다. RecipeController동일한 프레임 워크의 일부이기 때문에 다음과 같이 작성할 수 있습니다 .

Recipe *recipe = [[[Recipe alloc] init] autorelease];
[recipe->name autorelease];
recipe->name = [@"The best ever recipe!" retain];

RecipeKit하지만에 링크 된 응용 프로그램에서 위의 코드를 작성하면 해당 변수에 액세스 할 수 없기 때문에 컴파일러 오류가 발생합니다. 마지막으로, 32 비트 용으로 컴파일 된 @package경우 under 선언 된 변수는 @public대신 선언 된 것처럼 동작 하므로 여기서 차이점을주의하십시오.

이 새로운 기능은 클래스의 캡슐화를 깨는 또 다른 방법이기 때문에 거의 관심을받지 못했습니다. 항상 그렇듯이 @private변수로만 작업하고 이에 대한 접근 자 메서드를 사용하는 것이 좋습니다. 사실 한동안 애플은 @private템플릿 에 포함 시켜 이것을 밀어 붙이려 고했다. Objective-C 2.0의 속성을 사용하면 @private쉽게 고착 할 수 있으며 대상 플랫폼에 따라 인스턴스 변수를 완전히 생략 할 수 있습니다 .


이미지

이전 답변 중 일부가 약간 불분명 한 한 가지는 원래 질문의 이미지 측면을 다루는 것입니다. 사실, @package변수 설명에 사용 된 이미지라는 단어 는 그래픽 이미지와 관련이 없습니다. 대신 동적 링커가로드 할 수있는 이미지를 참조합니다. 일반적으로 실행 파일, 프레임 워크 및 동적 라이브러리는 모두 링커에서 이미지로 간주됩니다 (약간 다르게 처리되지만). 가끔씩 이미지라는 단어가 팝업되는 것을 볼 수 있습니다. 예를 들어, 일반적인 런타임 오류는 "dyld image not found"입니다. 에 대한 문서 전체에 흩어져있는 이미지라는 단어의 사용도 찾을 수 있습니다 dyld. 의 맨 페이지를 읽어 보면 dyld이 단어의 모호함을 좀 더 쉽게 해소 할 수 있습니다. UIImage변수를 다음과 같이 선언 할 수 있습니다.@package, 그러나 원래 질문과 관련이 있으므로 이미지와 관련이 없습니다.

참고 URL : https://stackoverflow.com/questions/772600/what-does-the-package-directive-do-in-objective-c

반응형