@package 지시문은 Objective-C에서 무엇을합니까?
Objective-C에서 @package 지시문이 정확히 무엇에 사용되는지 아는 사람이 있습니까?
Stephen Kochan의 Programming in Objective-C 2.0에서 찾을 수있는 유일한 언급은 다음과 같습니다.
@package-64 비트 이미지의 경우 클래스를 구현하는 이미지 내 어디에서나 인스턴스 변수에 액세스 할 수 있습니다.
...
뭐? 사진과 같이 이미지와 함께 사용하는 것으로 제한됩니까? 아니면 디스크 이미지와 같은 이미지를 의미합니까?
혼란스러운 설명이고 책의 나머지 부분을 자세히 설명하지 않습니다 ....
어떤 도움이라도 굉장 할 것입니다. 감사합니다!
@package
internal
.NET 과 유사합니다 . 이는 멤버가 정의 된 프레임 워크에서만 액세스 할 수 있음을 의미합니다.
참고 : 32 비트에서는 @public
.
Apple의 문서에서 이에 대해 약간 설명하지만 여기에 좀 더 자세한 내용이 있습니다.
에서 선언 된 인스턴스 변수 @package
는 동일한 프레임 워크, 라이브러리 또는 실행 파일의 코드로만 액세스 할 수 있습니다. 이것은 internal
C # 및 Friend
VB.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
'code' 카테고리의 다른 글
Mono의 명령 줄에서 MSBuild 파일 (Visual Studio sln)을 빌드 할 수 있습니까? (0) | 2020.11.21 |
---|---|
드롭 다운 화살표의 색상 및 모양 변경 (0) | 2020.11.21 |
IE에서 창 속성 삭제 (0) | 2020.11.21 |
Python에서 변수 이름으로 밑줄 _ (0) | 2020.11.21 |
HTML 5 비디오 또는 오디오 재생 목록 (0) | 2020.11.21 |