OC 문법 빠른 시작

7026 단어
출처:https://www.runoob.com/w3cnote/objective-c-tutorial.html
Interface
정의 부분에서 클래스의 명칭, 데이터 구성원과 방법을 명확하게 정의했다.키워드 @interface를 시작으로 하고 @end를 끝으로 합니다.
@interface MyObject : NSObject {
    int memberVar1; //     
    id  memberVar2;
}

+(return_type) class_method; //    

-(return_type) instance_method1; //     
-(return_type) instance_method2: (int) p1;
-(return_type) instance_method3: (int) p1 andPar: (int) p2;
@end


방법 앞의 +/-번호는 함수의 종류를 나타냅니다: 더하기 (+) 는 클래스 방법 (class method) 을 나타냅니다. 실례가 필요하지 않아도 호출할 수 있습니다. C++의 정적 함수 (static member function) 와 비슷합니다.빼기 기호(-)는 일반적인 인스턴스 방법(instance method)입니다.
다음은 비슷한 의미의 C++ 구문 대조입니다.
class MyObject : public NSObject {
protected:
    int memberVar1;  //     
    void * memberVar2;

  public:
    static return_type class_method(); //    

    return_type instance_method1();    //     
    return_type instance_method2( int p1 );
    return_type instance_method3( int p1, int p2 );
}


Objective-C가 새로운 방법을 정의할 때 이름 내의 콜론(:)은 매개 변수의 전달을 대표하고 C 언어와 달리 수학 함수의 괄호로 매개 변수를 전달한다.Objective-C 메서드는 매개변수를 이름 중간에 섞을 수 있으며 메서드 이름의 끝에 모두 첨부하지 않아도 프로그램의 읽기 용이성을 높일 수 있습니다.색상 RGB 값을 설정하는 방법은 다음과 같습니다.
- (void) setColorToRed: (float)red Green: (float)green Blue:(float)blue; /*     */

[myColor setColorToRed: 1.0 Green: 0.8 Blue: 0.2]; /*     */


이 방법의 서명은 setColorToRed:Green:Blue:입니다.모든 사칭 뒤에는float 종류의 매개 변수가 있는데 각각 빨간색, 녹색, 파란색의 세 가지 색을 대표한다.
Object – C에는 두 가지 유형의 메서드, 클래스 메서드 및 인스턴스 메서드가 있습니다.
클래스 방법은 + 로 시작하며 기본 형식은 다음과 같습니다.(id)someMethod;
유형 방법은 일반적으로 모두 공장 방법으로 하나의 실례를 되돌려준다.
인스턴스 방법은 - 로 시작하며 기본 형식은 다음과 같습니다.- (void)someMethod;
메서드는 매개변수를 포함하지 않거나 하나 이상의 매개변수를 포함하거나 값을 반환할 수 있습니다.
(int)someMethod;

(void)someMethodWithValue:(SomeType)value;

(void)someMethodWithFirstValue:(SomeType)value1 secondValue:(AnotherType)value2;


1. 프로그램의 헤더 파일과 원본 파일의 확장자는 각각이다.h와.m;
2. 주석: 한 줄(//)과 여러 줄(/*...*/),
3、Object_C의 nil은 NULL과 같습니다.
4、Object_C의 YES 및 NO는 true 및 false와 같습니다.
5. #import은 #include와 같고 가져오기 헤더 파일도 <...>과 "..."두 가지 검색 방식이 있지만 #import은 같은 파일을 여러 번 가져오는 것을 자동으로 방지합니다.
6、Object_C의 모든 클래스는 NSObject에서 상속되어야 합니다.
7、Object_C는 단일 상위 상속만 지원하며 다중 상속은 지원하지 않습니다.
8、Object_C의 모든 객체는 포인터 형식입니다.
9、Object_C는self로this를 대체한다.
10、Object_C는void*대신 id를 사용합니다.
11、Object_C에서 메시지 표시 클래스를 사용하고 [aInstance method:argv] 호출 형식을 사용합니다.
12、Object_C는 반사 메커니즘을 지원합니다.
13、Object_C는 Dynamic Typing, Dynamic Binding 및 Dynamic Loading을 지원합니다.
Implementation
실현 블록은 공개 방법의 실현과 사유(private) 변수와 방법을 정의한다.키워드 @implementation을 블록으로 시작하고 @end로 끝냅니다.
@implementation MyObject {
  int memberVar3; //      
}

+(return_type) class_method {
    .... //method implementation
}
-(return_type) instance_method1 {
     ....
}
-(return_type) instance_method2: (int) p1 {
    ....
}
-(return_type) instance_method3: (int) p1 andPar: (int) p2 {
    ....
}
@end


등록 정보
속성은 액세스 방법을 설명하는 편리한 방식을 대체하는 데 쓰인다.속성은 클래스 성명에 새로운 실례 변수를 만들지 않습니다.그들은 기존의 실례 변수에 접근하는 방법을 정의하는 속기 방식일 뿐이다.실례 변수의 클래스를 폭로합니다. Getter와setter 문법 대신 속성 기호를 사용할 수 있습니다.클래스는 또한 속성을 사용하여 일부'가상'의 실례 변수를 폭로할 수 있다. 그들은 일부 데이터의 동적 계산 결과이지 실례 변수에 확실히 저장된 것이 아니다.
실제로 속성은 당신이 반드시 써야 할 대량의 불필요한 코드를 절약했다고 말할 수 있다.대부분의 접근 방법은 유사한 방식으로 이루어지기 때문에, 속성은 클래스가 노출된 모든 실례 변수에 서로 다른 Getter와setter의 수요를 제공하지 않습니다.대신, 원하는 행동을 속성 성명으로 지정한 다음, 컴파일하는 동안 성명에 기반한 실제 Getter와setter 방법을 합성합니다.
속성 성명은 클래스 인터페이스의 방법 성명에 두어야 한다.기본 정의는 @property 컴파일 옵션을 사용하여 형식 정보와 속성의 이름을 따릅니다.사용자 정의 옵션으로 속성을 설정할 수 있습니다. 이것은 접근 방법의 행동을 결정합니다.다음 예에서는 간단한 속성 설명을 보여 줍니다.
@interface Person : NSObject {
    @public
        NSString *name;
    @private
        int age;
}

@property(copy) NSString *name;
@property(readonly) int age;

-(id)initWithAge:(int)age;
@end


성 접근 방법은 @synthesize 키워드로 이루어지며, 속성의 설명에 따라 자동으로 접근 방법이 생성됩니다.또한 @dynamic 키워드를 사용하면 접근 방법이 프로그래머가 수동으로 제공할 수 있음을 나타낼 수 있습니다.
@implementation Person
@synthesize name;
@dynamic age;

-(id)initWithAge:(int)initAge
{
    age = initAge; //   :        ,    
    return self;
}

-(int)age
{
    return 29; //   :         
}
@end


속성은 전통적인 메시지 표현식, 점 표현식, 또는'valueForKey: '/'setValue: forKey:' 방법으로 접근할 수 있습니다.
Person *aPerson = [[Person alloc] initWithAge: 53];
aPerson.name = @"Steve"; //   :    ,  [aPerson setName: @"Steve"];
NSLog(@"Access by message (%@), dot notation(%@), property name(%@) and direct instance variable access (%@)",
      [aPerson name], aPerson.name, [aPerson valueForKey:@"name"], aPerson->name);


점 표현식을 사용하여 인스턴스의 속성에 액세스하려면 self 키워드를 사용해야 합니다.
-(void) introduceMyselfWithProperties:(BOOL)useGetter
{
    NSLog(@"Hi, my name is %@.", (useGetter ? self.name : name)); // NOTE: getter vs. ivar access
}


클래스나 프로토콜의 속성을 동적으로 읽을 수 있습니다.
여러 속성 간에 쉼표로 구분할 수 있습니다.
4@property (strong, nonatomic) UIWindow *window; 속성은 일반적으로 데이터의 액세스와 저장을 제어하기 위해 수정을 추가합니다.
@property (readonly) NSString *firstName;
@property (readonly) NSString *lastName;



속성 손질:
readonly 및 readwrite:
readonly는 이 속성이 읽기만 하고 외부에서 값을 수정할 수 없음을 나타냅니다.readonly와 상대적인 수식은readwrite이지만, 기본값이기 때문에 그것을 쓸 필요가 없습니다.atomic 및 nonatomic:
(atomic,nonatomic) 속성은 다중 루틴 프로그래밍에 사용되며 속성은 기본적으로 atomic입니다.다중 루틴 환경에서 tomic로 설정하면 데이터 읽기의 일치성을 확보할 수 있습니다. (한 루틴만 독점할 수 있기 때문입니다. 즉, 한 루틴이 쓰기 작업을 할 때 이 속성을 잠그고 다른 루틴은 쓰기 작업을 허용하지 않습니다.)이 조작은 데이터에 대해 잠금 조작을 하기 때문에 비교적 많은 자원을 소모할 것이다.따라서 다중 루틴 조작이 필요 없을 때 이 속성을nonatomic로 설정하고 이 파라미터로 설정할 때 프로그램은 어떠한 상황에서도 이 속성을 잠그지 않습니다.
strong 및 weak:
여기서 strong은 기본값입니다.strong은 이 속성이 그에 상응하는 대상에 대해 강한 인용임을 나타낸다.하나의 변수는 하나의 대상에 대한 강력한 인용을 유지한다. 이 변수가 그 작용역 범위 내에 있거나 다른 대상이나nil에 부여될 때까지.weak는 속성에 대응하는 대상에 대한 약한 인용을 나타낸다.
copy、assign、retain:
copy 수식은 이 속성이 새 대상을 만들어야 하기 때문에 강력한 인용을 사용할 것입니다.
assign은 setter 방법을 간단하게 할당하고 색인 계수 (Reference Counting) 를 변경하지 않으며, 보통 간단한 데이터 형식에 assign을 사용합니다.
retain, 대상 인용 계수 1 더하기.
쾌속 매거
Objective-C 2.0은 NSEnumerator 객체를 활용하거나 컬렉션에서 순차적으로 매거하는 것보다 빠르게 매거할 수 있는 구문을 제공합니다.Objective-C 2.0에서 다음 루프의 기능은 동일하지만 성능 특성은 다릅니다.
//   NSEnumerator
NSEnumerator *enumerator = [thePeople objectEnumerator];
Person *p;

while ( (p = [enumerator nextObject]) != nil ) {
    NSLog(@"%@ is %i years old.", [p name], [p age]);
}

//       
for ( int i = 0; i < [thePeople count]; i++ ) {
    Person *p = [thePeople objectAtIndex:i];
    NSLog(@"%@ is %i years old.", [p name], [p age]);
}

//       
for (Person *p in thePeople) {
    NSLog(@"%@ is %i years old.", [p name], [p age]);
}


빠른 매거는 표준 매거보다 더 효과적인 코드를 만들 수 있다. 매거가 호출하는 방법은 NSFastEnumeration 프로토콜이 제공하는 지침 산술 연산으로 대체되기 때문이다.
또 다른 것들, 예를 들면 유형, 전송 이런 것들은 모두 뒤에서 배워도 상관없다

좋은 웹페이지 즐겨찾기