Day3 oc의 self 및 super
oc의 self와 슈퍼
@implementation Son : Father
- (id)init
{
self = [super init];
if (self)
{
}
return self;
}
동적 방법에서self는'대상'을 대표한다.정적 방법에서self는'클래스'를 대표하고,self는 시종 현재 방법의 호출자를 대표한다
self는 클래스의 숨겨진 매개 변수 변수로 현재 호출 방법의 대상(클래스도 대상, 클래스 대상)을 가리키며, 또 다른 숨겨진 매개 변수는cmd, 현재 클래스를 대표하는 selector.
현재 호출할 방법을 인쇄하는 경우 - (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"Current method: %@ %@",[self class],NSStringFromSelector(_cmd));
}
super는 숨겨진 파라미터가 아닙니다. "컴파일러 지시자"일 뿐입니다.
#import <Foundation/Foundation.h>
@interface Person:NSObject {
NSString* name;
}
- (void) setName:(NSString*) yourName;
@end
@implementation Person
- (void)setName:(NSString *)yourName
{
name = yourName;
}
@end
@interface PersonMe:Person {
NSUInteger age;
}
- (void) setAge:(NSUInteger)yourage;
- (void) setName:(NSString*) yourName andAge:(NSUInteger)yourage;
@end
@implementation PersonMe
- (void)setAge:(NSUInteger)yourage
{
age = yourage;
}
- (void) setName:(NSString*) yourName andAge:(NSUInteger)yourage
{
[self setAge:age];
[super setName:yourName];
NSLog(@"self ' class is %@", [self class]);
NSLog(@"super' class is %@", [super class]);
}
@end
int main (int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
PersonMe* me = [[PersonMe alloc] init];
[me setName:@"abc" andAge:18];
[me release];
}
return 0;
}
</span></span>
결과는 다음과 같습니다.
self 's class is PersonMe
super ' s class is PersonMe
super와 self는 같은 메시지 수신자를 가리킨다. 위의 코드를 예로 들면 [self setName]이든 [super setName]이든'setName'이라는 메시지를 받는 수신자는 모두PersonMe*me의 대상이다.다른 것은 슈퍼가 컴파일러에게 setName 방법을 호출할 때, 이 클래스가 아닌 부모 클래스를 호출해야 한다고 알려 준다.
ps:self 호출 방법을 사용할 때 현재 클래스의 방법 목록에서부터 찾고 없으면 부모 클래스에서 다시 찾습니다.슈퍼를 사용할 때 슈퍼가 나타나는 방법이 있는 클래스의 부류부터 찾습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
@implementation Son : Father
- (id)init
{
self = [super init];
if (self)
{
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"Current method: %@ %@",[self class],NSStringFromSelector(_cmd));
}
#import <Foundation/Foundation.h>
@interface Person:NSObject {
NSString* name;
}
- (void) setName:(NSString*) yourName;
@end
@implementation Person
- (void)setName:(NSString *)yourName
{
name = yourName;
}
@end
@interface PersonMe:Person {
NSUInteger age;
}
- (void) setAge:(NSUInteger)yourage;
- (void) setName:(NSString*) yourName andAge:(NSUInteger)yourage;
@end
@implementation PersonMe
- (void)setAge:(NSUInteger)yourage
{
age = yourage;
}
- (void) setName:(NSString*) yourName andAge:(NSUInteger)yourage
{
[self setAge:age];
[super setName:yourName];
NSLog(@"self ' class is %@", [self class]);
NSLog(@"super' class is %@", [super class]);
}
@end
int main (int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
PersonMe* me = [[PersonMe alloc] init];
[me setName:@"abc" andAge:18];
[me release];
}
return 0;
}
</span></span>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.