20150616點語法

//
//  Dog.h
//  IOS15090616_ObjectiveC_DotSyntax
//
//  Created by Peng Junlong on 15/6/16.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Dog : NSObject
//{
//    NSString *_name;
//    NSInteger _age;
//}
- (id)init;

//方法一:實現只能是.m文件中的方法一,
//- (void)setName:(NSString *)aname;
//- (void)setAge:(NSInteger)aage;
//- (NSString *)name;
//- (NSInteger)age;

//方法二:實現可以是.m文件中的方法一,方法二和方法三 三種
//@property 關鍵字展開,默認展開setter和getter方法
//- (void)setName:(NSString *)aname;
//- (NSString *)name;
@property NSString *name;   //省略方法聲明,實現的方法名和這個名字一樣
@property NSInteger age;

<pre name="code" class="objc">//  Dog.m
//  IOS15090616_ObjectiveC_DotSyntax
//
//  Created by Peng Junlong on 15/6/16.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import "Dog.h"

@implementation Dog

- (id)init
{
    if (self = [super init]) {
        _name = @"小黑";
        _age = 2;
    }
    return self;
}

//方法一:
//- (void)setName:(NSString *)aname
//{
//    _name = aname;
//}
//
//- (void)setAge:(NSInteger)aage
//{
//    _age = aage;
//}
//
//- (NSString *)name
//{
//    return _name;
//}
//
//- (NSInteger)age
//{
//    return _age;
//}

//方法二:
//@synthesize 關鍵字展開setter和getter方法的實現
//可以在.h文件中省略_name和_age的聲明,@synthesize展開了_name和_age
//@synthesize name = _name;   //name和_name表示的是同一個實例變量,編譯器會自動根據name聲明_name變量
//@synthesize age = _age;

//方法三:
//省略@synthesize

- (void)printDog
{
    NSLog(@"name = %@,age= %ld",[self name],[self age]);
}
@end

//方法三//@property//展開了setter和getter方法的聲明及synthesize語句;//synthesize//展開@synthesize name = _name;// @synthesize age = _age;//展開的_name和_age是私有的,可以在{}中聲明將其公開////@property NSString *name; //省略方法聲明,實現的方法名和這個名字一樣////@property NSInteger age;- (void)printDog;@end


//
//  main.m
//  IOS15090616_ObjectiveC_DotSyntax
//
//  Created by Peng Junlong on 15/6/16.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Dog.h"

//******************************
//*         點語法              *
//*    @property和@synthesize   *
//******************************

//點語法:方便其他程序員轉移到IOS開發
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        Dog *dog = [[Dog alloc] init];
        [dog printDog];
        [dog setName:@"小白"];
        [dog printDog];
        dog.name = @"小黃";// 等價於[dog setName:@"小黃"];編譯器會將它自動編譯成[dog setName:@"小黃"];
                         //dog->_age;//直接調用實例變量,變量必須是public的
        dog.age = 23;
        [dog printDog];
        
        //有等號,點放在等號左邊時是等價於調用setter方法,否則是等價於getter方法
        //等價於調用[dog name]和[dog age]
        NSLog(@"name = %@ ,age = %li",dog.name,dog.age);;
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章