Objective-C에서 "@private"는 무엇을 의미합니까?
무엇인가.@private
목표-C의 평균은?
가시성 수식어입니다.인스턴스 변수가 다음과 같이 선언된 것을 의미합니다.@private
는 같은 클래스의 인스턴스만 액세스할 수 있습니다.개인 구성원은 하위 클래스 또는 다른 클래스에서 액세스할 수 없습니다.
예를 들어 다음과 같습니다.
@interface MyClass : NSObject
{
@private
int someVar; // Can only be accessed by instances of MyClass
@public
int aPublicVar; // Can be accessed by any object
}
@end
또한 명확히 하기 위해 방법은 항상 Objective-C에서 공개된다.다만, 메서드 선언을 「숨기는」 방법도 있습니다.자세한 것에 대하여는, 이 질문을 참조해 주세요.
htw가 말했듯이, 그것은 가시성 수식어입니다. @private
ivar(변수)는 같은 클래스의 인스턴스 내에서만 직접 액세스할 수 있음을 의미합니다.하지만, 그것은 당신에게 큰 의미가 없을지도 모르기 때문에, 예를 들어 보겠습니다.를 사용합니다.init
예를 들어, 단순성을 위해 수업의 방법.관심 있는 항목을 지적하기 위해 인라인으로 댓글을 달겠습니다.
@interface MyFirstClass : NSObject
{
@public
int publicNumber;
@protected // Protected is the default
char protectedLetter;
@private
BOOL privateBool;
}
@end
@implementation MyFirstClass
- (id)init {
if (self = [super init]) {
publicNumber = 3;
protectedLetter = 'Q';
privateBool = NO;
}
return self;
}
@end
@interface MySecondClass : MyFirstClass // Note the inheritance
{
@private
double secondClassCitizen;
}
@end
@implementation MySecondClass
- (id)init {
if (self = [super init]) {
// We can access publicNumber because it's public;
// ANYONE can access it.
publicNumber = 5;
// We can access protectedLetter because it's protected
// and it is declared by a superclass; @protected variables
// are available to subclasses.
protectedLetter = 'z';
// We can't access privateBool because it's private;
// only methods of the class that declared privateBool
// can use it
privateBool = NO; // COMPILER ERROR HERE
// We can access secondClassCitizen directly because we
// declared it; even though it's private, we can get it.
secondClassCitizen = 5.2;
}
return self;
}
@interface SomeOtherClass : NSObject
{
MySecondClass *other;
}
@end
@implementation SomeOtherClass
- (id)init {
if (self = [super init]) {
other = [[MySecondClass alloc] init];
// Neither MyFirstClass nor MySecondClass provided any
// accessor methods, so if we're going to access any ivars
// we'll have to do it directly, like this:
other->publicNumber = 42;
// If we try to use direct access on any other ivars,
// the compiler won't let us
other->protectedLetter = 'M'; // COMPILER ERROR HERE
other->privateBool = YES; // COMPILER ERROR HERE
other->secondClassCitizen = 1.2; // COMPILER ERROR HERE
}
return self;
}
따라서 질문에 답하기 위해 @private는 다른 클래스의 인스턴스에서 ivar를 액세스로부터 보호합니다.MyFirstClass의 두 인스턴스는 서로의 ivar 모두에 직접 액세스할 수 있습니다.프로그래머는 이 클래스를 직접 제어할 수 있기 때문에 이 기능을 현명하게 사용할 수 있습니다.
다른 사람이 액세스 할 수 없다고 했을 때의 의미를 이해하는 것이 중요합니다.@private
instance 변수.실제 이야기는 소스 코드에서 이러한 변수에 액세스하려고 하면 컴파일러가 오류를 발생시킨다는 것입니다.이전 버전의 GCC 및 XCode에서는 오류 대신 경고만 표시되었습니다.
어느 쪽이든, 실행 시간에는 모든 베팅이 취소됩니다.이것들@private
그리고.@protected
ivars는 임의의 클래스의 오브젝트로 액세스 할 수 있습니다.이러한 가시성 수식어는 소스 코드를 가시성 수식자의 의도를 위반하는 기계 코드로 컴파일하는 것을 어렵게 할 뿐입니다.
보안을 위해 ivar 가시성 수정자에 의존하지 마십시오.그들은 전혀 제공하지 않는다.그것들은 전적으로 학급 설립자의 희망에 대한 컴파일 타임 시행을 위한 것이다.
언급URL : https://stackoverflow.com/questions/844658/what-does-private-mean-in-objective-c
'programing' 카테고리의 다른 글
UIStackView 내에 추가된 보기에 선행 패딩을 추가하는 방법 (0) | 2023.04.24 |
---|---|
최적의 Excel 파일 읽기 방법(.xls/.xlsx) (0) | 2023.04.24 |
Postgre를 사용하여 동일한 쿼리의 여러 행 업데이트SQL (0) | 2023.04.24 |
java.displaces를 클릭합니다.ClassNotFoundException: com.sun.jersey.spi.container.servlet.서블릿 컨테이너 (0) | 2023.04.24 |
Excel 테이블에서 모든 데이터 행 삭제(첫 번째 행 제외) (0) | 2023.04.24 |