• oc-25- @property @synthesize


    s.h
    
    #import <Foundation/Foundation.h>
    
    @interface Student : NSObject
    {
        @public
        NSString *_name;
        int _age;
        int _height;
    }
    
    // @property能够自动生成set和get方法的 声明
    // @property 成员变量类型 成员变量名称(去掉下划线);
    //- (void)setName:(NSString *)name;
    //- (NSString *)name;
    @property NSString *name;
    @end
    
    
    s.m
    
    /**
     问题:想要给自己不带下划线的成员变量进行赋值,怎么办?>
    
     需要给@synthesize指定,告诉该赋值给谁.
     @synthesize name = _name;
     它就知道,赋值_name;
     */
    
    
    #import "Student.h"
    
    @implementation Student
    @synthesize name;
    //生成了getset方法的实现
    //- (void)setName:(NSString *)name
    //{
    //    name = name;
    //    NSLog(@"%p",name);
    //}
    //- (NSString *)name
    //{
    //
    // return name;
    //}
    @end
    
    
    main.m
    
    #import <Foundation/Foundation.h>
    #import "Student.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            Student *s = [Student new];
            s.name = @"亚索";
            // 这步能够调用,证明@property生成了set和get方法的声明.
            [s setName:@"亚索"];
            // 证明@synthesize生成了set和get方法的实现.
            NSLog(@"%p",s->name);
            NSLog(@"-----");
        }
        return 0;
    }

    @property增强使用

    • Xcode4.4版本以后支持的
    • 只使用 @property 进行声明,类自动帮你实现。
    • Xcode4.4以后property做了增强

      • 帮助我们自动生成get/set方法的声明
      • 帮助我们自动生成get/set方法的实现
    s.h
    /**
      @property的加强用法:
     1.生成set和get方法的声明
     2.生成set和get方法的实现
     3.生成带下划线的成员变量.
     
     注意事项:
     1. 当用户手动重写了set方法时,@property会生成get方法和带下划线的成员变量
     2. 当用户手动重写了set和get方法时.@property不会生成待下划线的成员变量.
     3. 当用户手动重写了get方法时,@property会生成set方法和带下划线的成员变量.
     
     */
    
    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    @interface Student : Person
    
    @property NSString *name;//生成的变量名是_name,
    
    @property int age;
    
    @property int height;
    
    @property int weight;
    
    @end
    
    
    s.m
    
    #import "Student.h"
    
    @implementation Student
    
    //@synthesize age = _age,height = _height,weight = _weight,name = _name;
    
    //手动重写get方法
    - (NSString *)name
    {
        return _name;
    }
    
    
    - (instancetype)init
    {
        if (self = [super init]) {
            NSLog(@"s---%@",self);
            NSLog(@"s---%@",super.class);
        }
        return self;
    }
    @end
  • 相关阅读:
    SQL Server CheckPoint的几个误区
    MongoDB集群与LBS应用系列(一)
    也来“玩”Metro UI之磁贴
    Python基础:函数式编程
    ASP.NET MVC 用户登录Login
    巧用 .NET 中的「合并运算符」获得 URL 中的参数
    Razor.js,基于JavaScript的Razor实现
    大话数据结构-排序
    hdu 1498
    3.7 检测两个表中是否有相同的数据
  • 原文地址:https://www.cnblogs.com/yaowen/p/5311330.html
Copyright © 2020-2023  润新知