黑马程序员技术交流社区

标题: 对点语法的一些认识 [打印本页]

作者: Perhaps    时间: 2015-1-16 12:40
标题: 对点语法的一些认识
点语法和属性@property
#import <Foundation/Foundation.h>
@interface Dog : NSObject
{
    NSString *_name;
    int _age;
    double _height;
}
//解释;
// NSString * 意味着设置方法的参数是NSString *
//  那么意味着设置方法的名字是setName
//  获取方法的方法名是name
//      相当于声明了设置方法和获取方法
//细节:只写property,没有写对应的实例变量
//          默认生成的实例是带有下划线的
//  例如:property是name  ,生成的实例变量_name
//****这时候权限变成私有的
//copy  参数
@property (copy)NSString * name;
@property int age;
@property double height;
//属性特性   可替换以下两句
//-(void)setAge:(int)age;
//-(int)age;
//-(void)setHeight:(double)height;
//-(double)height;
@end
#import "Dog.h"
@implementation Dog
/*
-(void)setName:(NSString *)name;
{
    _name=name;
}
-(NSString *)name;
{
    return  _name;
}
-(void)setAge:(int)age;
{
    _age=age;
}
-(int)age;
{
    return  _age;
}
-(void)setHeight:(double)height;
{
    _height=height;
}
-(double)height;
{
    return _height;
}
*/
//实现了name对应的获取方法和设置方法
//细节:默认情况下操作的实例变量是name
//@synthesize name;

//name对应头文件@property中的name
//=_name   表示实现的设置方法和获取方法
//          操作的实例变量是_name

@synthesize name=_name;
@synthesize age=_age;
@synthesize height=_height;
@end
#import <Foundation/Foundation.h>
#import "Dog.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        //点语法
        //执行了setname方法
        //错误的认识:huzi对象中有name
        //本质:调用了一个设置方法
        Dog *huzi=[[Dog alloc]init];
        //[huzi setName:@"dog"];
        huzi.name=@"huzi";
        //获取name
        //NSString *name=[huzi name];
        //
        NSString *name=huzi.name;
        NSLog(@"name=%@",name);
        
    }
    return 0;
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2