Objective-C 객체 대상(1)

7097 단어 Objective-C

1. 클래스와 대상


1.1 클래스 정의


대상을 대상으로 하는 프로그램 설계에는 두 가지 중요한 개념이 있는데 그것이 바로 클래스(class)와 대상(object)이다. 클래스는 특정한 대상의 추상적이고 대상은 구체적으로 존재하는 실체이다.
Objective-C 클래스를 정의하려면 분위기 2단계가 필요합니다.
  • 인터페이스 부분: 이 클래스에 포함된 구성원 변수와 방법을 정의합니다.
  • 실현 부분: 이런 방법에 실현을 제공한다.

  • 인터페이스 섹션을 정의하는 구문:
    @interface MyClass:NSObject { int count; id data; NSString* _name; } -(id)initWithString:(NSString)aName; +(MyClass)createMyClassWithString:(NSString* aName); @end @interface는 정의 클래스의 인터페이스 부분을 설명하는 데 사용되며 @end는 정의가 끝났음을 나타냅니다.그 다음에 이 클래스의 구성원 변수를 설명하기 위해 이 클래스 d와 함께 괄호 한 쌍을 묶는다.괄호 뒤의 부분은 이런 종류의 방법을 설명하는 데 쓰인다.정의 클래스의 인터페이스 성명 부분 재해 방지 헤더 파일에서
  • 구성원 변수: 이 유형의 대상을 설명하는 데 사용되는 상태 데이터
  • 방법: 이런 행위를 묘사하는 데 쓰인다
  • 구성원 변수 정의 ;선언 방법:- (void)insertObject:(id)anObject atIndex:(NSUInteger)index
    메소드 유형 ID: + 또는 -, + 은 메소드가 클래스 메소드이며 직접 유형만 호출할 수 있음을 나타냅니다. -이 방법은 실례적인 방법이므로 반드시 대상이 있어야만 호출할 수 있다.
    반환 값 형식: OC에서 허용하는 모든 데이터 형식일 수 있습니다.
    방법 서명 키워드: 방법 이름, 인삼 라벨, 사칭으로 구성되어 있습니다.OC는 뒤에 있는 모든 인삼에 인삼 라벨을 지정하는 것을 권장합니다. 이 인삼 라벨은 인삼의 역할을 잘 설명할 수 있습니다.
    Objective-C의 방법 설명에서 모든 종류(void 포함)는 괄호로 묶어야 합니다.
    구현 섹션을 정의하는 구문:@implementation MyClass { int _count; id _data; NSString* _name; } -(id)initWithString:(NSString*)aName { // } +(MyClass*)createMyClassWithString:(NSString*)aName { // }
    설명:
  • 클래스 실현 부분의 유형은 클래스 핑계 부분의 클래스 이름과 같아야 한다.이것은 같은 종류의 인터페이스 부분과 실현 부분임을 나타내는 데 쓰인다.
  • 류의 실현 부분도 유명 후에':부류명'을 사용하여 특정한 부류를 계승했다는 것을 나타낼 수 있는데 일반적으로 필요없다.
  • 클래스 구현 부분도 자신의 구성원 변수를 성명할 수 있지만 이러한 구성원 변수는 현재 클래스에서만 접근할 수 있습니다.4. 클래스 실현 부분은 클래스 성명 부분의 모든 방법에 대해 방법 정의를 제공해야 한다.

  • 1.2 객체의 생성 및 사용


    정의 변수: * 창설 대상: [[ alloc] ] alloc는 OC의 키로 클래스에 메모리 공간을 분배하고 창설 대상을 담당하며 초기화 방법을 호출하여 이 실례를 초기화합니다.모든 대상은 클래스 NSObject를 계승하고 모든 클래스는 기본적인 초기화 방법이 있습니다: init.new 창설 대상 [ new] OC 호출 방법의 문법은 [ : : ...]

    1.3 self


    self 키워드는 항상 이 방법을 사용하는 대상을 가리킨다.self 키워드의 가장 큰 역할은 클래스의 한 방법이 클래스의 다른 방법이나 구성원 변수에 접근하도록 하는 것이다.
    #import <Foundation/Foundation.h>
    
    @interface FKWorf:NSObject
    {
    	NSString* _name;
    }
    -(void) setName:(NSString*)_name;
    -(void) info;
    @end
    
    @implementation FKWorf
    -(void) setName:(NSString*) n
    {
    	self->_name = n;
    }
    -(void) info
    {
    	NSLog(@" %@",self->_name);
    }
    @end
    
     int main(int argc, char const *argv[])
    {
    	
    	@autoreleasepool
    	{
    		FKWorf* worf = [[FKWorf alloc] init];
    		[worf info];
    	}
    	return 0;
    }

    1.4 id 유형


    임의의 형식의 대상은 id 형식의 변수에 복사할 수 있습니다
    id p = [[FKWorf alloc] init];
    [p info];

    2. 방법 상해


    OC에서 메서드의 속성:
  • 방법은 독립적으로 정의할 수 없고 클래스에서만
  • 정의할 수 있다
  • 논리적 의미에서 보면 방법은 해당 클래스 자체(+)에 속하거나 해당 클래스의 한 대상(-)에 속한다.
  • 은 독립적으로 실행할 수 없습니다. 실행 방법은 반드시 클래스나 대상을 호출자로 사용해야 합니다.
  • 2.1 형삼 개수 가변 방법


    방법을 정의할 때 마지막 참조 뒤에 쉼표와 세 점(,...)을 추가합니다.이 인삼은 여러 개의 매개 변수 값을 받아들일 수 있음을 나타낸다.
    길이가 변할 수 있는 형삼은 형삼 목록의 마지막 부분에만 있고 한 방법에는 길이가 변할 수 있는 형삼이 최대 한 개만 포함될 수 있다.
    정의 문법: -(void)test:(NSString*)name,...참조를 획득하려면 다음과 같이 하십시오.
  • va_list, 가변 매개 변수 목록을 가리키는 바늘 정의
  • va_start, 함수, 변형 인삼 처리를 시작하는 목록을 작성하고 변형 인삼 목록의 첫 번째 인자
  • 을 가리키도록 합니다
  • va_end, 끝 처리 변형 참조, 방출 바늘 변수
  • va_arg, 이 함수 범호는 바늘이 현재 가리키는 매개 변수의 값을 가져오고, 바늘을 다음 매개 변수
  • 을 가리킨다
    -(void)test:(NSString*)name,...
    {
    	va_list argList;
    	// name , 
    	if(name)
    	{
    		NSLog(@"%@",name);
    		va_start(argList,name);
    		NSString* arg = va_arg(argList,id);
    		while(arg)
    		{
    			NSLog(@"%@",arg);
    			arg = va_arg(argList,id);
    		}
    		va_end(argList);
    	}
    
    }

    3. 멤버 변수


    구성원 변수는 클래스 인터페이스 부분이나 클래스 실현 부분에서 정의된 변수를 가리키며 OC의 구성원 변수는 모두 실례 변수이다.액세스 실례 변수 -> 성명 실례 변수, 시스템은 실례 변수에 대한 기본 초기화, 기본 형식의 실례 변수는 기본적으로 0, 바늘 형식의 구성원 변수는 기본적으로 초기화nil

    4. 숨기기 및 포장


    4.1 포장


    봉인이란 대상의 상태 정보를 대상 내부에 숨기고 외부 프로그램이 대상 내부 정보를 직접 방문하는 것을 허락하지 않으며 이 클래스가 제공하는 방법 클래스를 통해 내부 정보에 대한 조작과 접근을 실현하는 것을 말한다.

    4.2 액세스 제어부


    액세스 제어부 4개: @private, @package, @protected, @public

    4.3 @package 액세스 제어부


    @package 수식의 구성원 변수는 현재 클래스와 같은 이미지에 접근할 수 있습니다. 같은 이미지는 컴파일한 후에 생성된 같은 프레임워크나 같은 실행 파일을 말합니다.

    4.4 합성 액세스 방법

  • 은 클래스 인터페이스 부분에서 @property 명령을 사용하여 속성을 정의한다.@property을 사용하여 속성을 정의하면 클래스 인터페이스의 괄호 안에 넣지 않고 @interface, @end 사이에 넣는다.@property 표시기는 속성 정의의 맨 앞에 있습니다.
  • 이 클래스에서 실현된 부분은 @synthesize 명령을 사용하여 이 속성을 성명한다.

  • 상기 절차는 쌍의setter와getter 방법을 합성하고 클래스 실현 부분에서 getter 방법과 같은 구성원 변수를 자동으로 정의합니다.
    <!--
    h='&#x73;&#x79;&#x65;&#116;&#104;&#x65;&#x73;&#x69;&#122;&#x65;&#30340;&#x8bed;&#x6cd5;&#26684;&#x5f0f;';a='&#64;';n='&#x4f7f;&#29992;';e=n+a+h;
    document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
    //-->
    at syethesize 구문 형식 사용@sythesize property [= ]
    #import <Foundation/Foundation.h>
    
    @interface FKUser:NSObject
    
    @property (nonatomic) NSString* name;
    @property NSString* pass;
    @property NSDate* birth;
    //-(void)setName:(NSString*) name;
    @end
    
    @implementation FKUser
    @synthesize name=_name;
    @synthesize pass;
    @synthesize birth;
    
    -(void)setName:(NSString*) name
    {
    	self->_name=[NSString stringWithFormat:@"+++%@",name];
    }
    
    @end
    
    int main(int argc, char const *argv[])
    {
    	FKUser* user=[[FKUser alloc] init];
    	[user setName:@" "];
    	[user setPass:@"1234"];
    	[user setBirth:[NSDate date]];
    	NSLog(@"name=%@,pass=%@,birth=%@",[user name],[user pass],[user birth]);
    	return 0;
    }
    @property과 유형 간에 괄호를 사용하는 추가 표시자
  • assign은 속성에 대한 간단한 값만 지정하고 부여된 값에 대한 인용 계수를 변경하지 않습니다.NSinteger 및 short float double 구조체 등 C 데이터 유형
  • atomic(nonatomic) 기본atomic, 합성 방법이 원자 조작인지 지정, 한 라인이 액세스 방법의 방법체에 들어간 후 다른 라인은 이 저장, 제거 방법에 들어갈 수 없으며 다중 라인 얼음법이 대상의 완전성을 파괴하지 않도록 한다.
  • copy은copy를 사용하고setter 방법으로 구성원 변수에 값을 부여할 때 부여된 대상을 복사하여 이 던전의 값을 구성원 변수에 부여한다.
  • getter, setter 합성된 Getter,setter 방법에 대한 사용자 정의 방법명 문법 지정 @property (assign,nonatomic,getter=wawa,setter=nana:) int price;
  • readonly, readwrite(기본값), readonly 지시 시스템은 Getter 방법만 합성
  • retain 속성 부여 시 원래 인용된 대상의 인용계수기는 1을 줄이고 부여된 대상의 인용계수는 1
  • 을 더한다
  • strong, weak의 강한 인용, 약한 인용, 강한 인용이 부여된 대상을 가리키면name 대상은 자동으로 회수되지 않는다.약한 인용이 가리키는 대상은
  • 으로 회수될 수 있습니다
  • unsafe_unretained weak과 비슷, unsafeunretained에서 인용한 대상이 회수되면 unsaferetained 바늘은 nil으로 부여되지 않으며 프로그램 붕괴를 초래할 수 있습니다
  • 4.5점 문법

    좋은 웹페이지 즐겨찾기