흑마 프로그래머---oc 언어 학습 노트의 구조 방법과 분류
2778 단어 개발 클래스
1. 구조 방법 구조 방법의 정의: 대상의 실례 변수 값을 초기화하는 방법으로 대상 방법이다. - 구조 방법을 처음부터 다시 쓰는 목적: 대상을 만들기 위해구성원 변수는 일정한 값 구조 방법의 호출이 있습니다. 완전한 대상을 만듭니다. Person*p=[Person new] new 방법은 3가지 방법을 사용합니다 (1) alloc 방법을 사용하여 저장 공간을 분배합니다(분배된 대상을 되돌려줍니다) Person*p = [Person alloc].(2) init 방법을 사용하여 대상을 초기화한다.Person *p = [p1 init]; (3) 반환 대상의 첫 주소 총결산은 new Person*p=[[Person alloc] init] 대신 한 문장으로 통합할 수 있다.init 방법은 구조 방법으로 대상을 초기화하는 방법이다. 이것은 대상 방법으로 감호로 시작하는 것을 주의한다.기본값이 초기화되면 모든 구성원 변수의 값이 0이 됩니다.alloc가 어떤 클래스에 alloc 메시지를 보낸 결과는 이 클래스에 메모리를 분배하고, 이 클래스의 모든 실례 변수를 저장하며, 이 메모리 영역을 0으로 초기화합니다. 리셋 구조 방법 공식 리셋 구조 방법 init는 다음과 같습니다.
- (id) init
{
if(self = [super init])
{
//
}
return self;
}
1.super init는 부류의 init 방법을 이용하여 부류의 실례를 초기화하는 부류 부분 속성 초기화if문장 판단 [self=[super init]]는 부류의 초기화release가self가 가리키는 공간을 떨어뜨리는 것을 방지하기 위해 다시 alloc를 만들었습니다. 이때 [super init]는alloc가 실패할 수 있습니다. 이때if의 문장을 실행하지 마십시오.
#import
@inerface Person :NSobject
@property int age;
@end
@implementation Person
-(id)init
{
if(self=[super init])
{
_age=10;
}
return self
}
@end
@interface Student :Person
@property int socer;
@end
@implementation Student
-(id)init
{
if(self=[super init])
{
_socer=10;
}
return self
}
@end
int main()
{
Student *p[[Student alloc] init];
Nslog(@"%d,%d",p.age,p.socer);
return 0;
}
구조 방법은 주의 (1) 자류가 가지고 있는 구성원 변수는 자신의 구성원 변수와 부류에서 계승된 구성원 변수를 포함한다. 구조 방법을 다시 쓸 때 부류에서 계승된 구성원 변수를 먼저 초기화해야 한다.(2)원칙: 먼저 부류를 초기화한 다음에 부류를 초기화한다.(3) 재구성 방법의 목적: 대상 방법을 만들기 위해 구성원 변수는 고정된 값이 있을 수 있다.(4) 주의점: 1) 부류의 구조 방법 [super init]를 먼저 호출한다.2) 하위 클래스 내부 구성원 변수의 초기화를 진행한다.2. 분류 분류의 역할 1) 기존 클래스를 수정하지 않는 토대에서 새로운 방법을 추가할 수 있다. 2) 하나의 클래스 모듈을 개발할 수 있다. 3) 하나의 큰 클래스는 여러 사람이 작성할 수 있고 팀의 합작 사용 분류에 더욱 유리하다. 1) 기존 클래스를 확장 2) 하위 클래스로 하는 대체 수단 3) 거대한 클래스를 작은 블록으로 나누어 각각 개발한다.따라서 클래스 방법에 대한 업데이트 및 유지보수 분류의 성명 형식 1) @interface 분류명(기존 클래스명) 분류 추가 방법은 분류에 구성원 변수를 추가하는 것을 허용하지 않습니다 @end 분류의 사용 주의사항 1. 분류는 방법만 추가할 수 있고 구성원 변수, @property는 추가할 수 없습니다.2. 분류는 원래 클래스의 구성원 변수에 접근할 수 있다. 3. 분류와 원래 클래스가 같은 이름을 가진 방법은 분류 중의 방법을 우선적으로 호출하고 원래 클래스의 방법은 무시된다.
#import
@interface Person : NSObject
@property int age;
@property int weight;
-(void)eat;
@end
@implementation Person
-(void)eat
{
_weight=_weight+1;
Nslog(@"the person weight add");
}
@end
@interface Person(study)
-(void)study;
-(void)run;
@end
@implementation Person(study)
-(void)study
{
NSlog(@"xunxi");
}
-(void)run
{
NSlog(@"runing");
}
@end
int main()
{
Person *p=[[Person alloc]init];
[p eat];
[p study];
[p run];
}