03OC의 클래스 보충
키워드
1. C#에 키워드this가 현재 대상을 나타내는데 사실 OC에도 비슷한 키워드self가 있다. 단지self키워드는 현재 대상을 나타낼 뿐만 아니라 클래스 자체도 나타낼 수 있다. 즉, 정적 방법에도 넣을 수 있고 동적 방법에도 사용할 수 있다.
#import "Person.h"
@implementation Person
-(void)setName:(NSString *)name andAge:(int)age{
// _name=name;
// _age=age;
self.name=name;
self.age=age;
}
+(void)printInfo{
NSLog(@"Hello,World!");
}
+(void)showMessage{
[self printInfo];
}
@end
그리고 호출할 때를 보세요.
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
Person *p=[[Person alloc]init];
[p setName:@"Kenshin" andAge:28];
[Person showMessage];
return 0;
}
그 중에서 setNameandAge는 동적 방법으로 이때self는 p라는 대상을 나타내고 showMessage는 호출된 클래스를 대표하기 때문에self는 현재 방법의 호출자이다.
self에 대한 주의 사항:
#import "Person.h"
@implementation Person
-(void)setName:(NSString *)name{
self.name=name;
}
이것은 속성을 실현하는 코드,self.name=name;사실은 self를 호출하는 거예요.setName=name;이렇게 하면 사순환을 일으킬 것이다.그래서 @property에서 자동으로 생성된 속성을 사용하지 않았을 때 구성원 변수를 정의할 때 밑줄을 긋습니다.(name 좋은 습관)
2. 구조 함수
앞에서 우리가 클래스를 만드는 대상은 초기화할 때 init 방법(구조 함수)을 호출해야 한다. 다음은 사용자 정의 구조 함수를 좋아하는 것을 살펴보자.
구현 코드:
//
-(id)initWithName:(NSString *)name andAge:(int)age{
if(self=[super init]){ //super
self.name=name;
self.age=age;
}
return self;
}
OC에서 슈퍼는 부류를 대표하며 부류를 호출하는 방법으로 현재 대상에게 값을 부여한 다음에 이 대상이nil인지 아닌지를 판단하고 비어 있지 않으면name,age 속성에 순차적으로 값을 부여한다.
어떻게 호출하는지 보십시오:
int main(int argc, const char * argv[]) {
Person *p=[[Person alloc]initWithName:@"Kenshin" andAge:28];
NSLog(@"name=%@,age=%i",p.name,p.age);
// :name=Kenshin,age=28
return 0;
}
사용자 정의 구조 방법을 통해 코드를 간소화할 수 있지만 사용할 때 수동으로 메모리를 신청해야 한다. OC에서 일반적으로 우리는 정적 방법을 정의하여 이 문제를 해결한다.
//
+(id)personWithName:(NSString *)name andAge:(int)age{
Person *p=[[Person alloc]initWithName:name andAge:age];
return p;
}
int main(int argc, const char * argv[]) {
Person *p=[[Person alloc]initWithName:@"Kenshin" andAge:28];
NSLog(@"name=%@,age=%i",p.name,p.age);
// :name=Kenshin,age=28
Person *p2=[Person personWithName:@"Kaoru" andAge:27];
NSLog(@"name=%@,age=%i",p2.name,p2.age);
// :name=Kaoru,age=27
return 0;
}
3. description 방법
C# 모든 클래스에는 대상의 정보를 인쇄하는 데 사용되는 Tostring () 방법이 있습니다. OC에서는 이 방법을 description이라고 합니다. 예를 들어 앞의 Person 클래스에서 우리는 이 방법을 다시 써서 인쇄 디버깅에 사용할 수 있습니다.
@implementation Person
-(NSString *)description{
return [NSString stringWithFormat:@"{name:%@,age:%i}",self.name,self.age];
}
int main(int argc, const char * argv[]) {
Person *p=[[Person alloc]init];
p.name=@"Kenshin";
p.age=28;
NSLog(@"%@",p);// description
/* :
name:Kenshin,age:28}
*/
return 0;
}
NSLog의 형식 문자가%@인 것을 주의하십시오.%@을 사용하여 대상을 출력할 때 OC는 이 대상의 description을 호출하여 출력합니다. 기본적으로 description 방법을 다시 쓰지 않을 때 출력 내용은 <클래스: 주소 > 예를 들어 "
상속
OC는 대상 언어이기 때문에 당연히 계승을 지원하지만 사실 우리의 Persion은 NSObject를 계승했다.하위 클래스는 부모 클래스의 방법과 속성을 다시 쓸 수 있습니다.자세히 말하지 않다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.