• oc28--Property增强


    //
    //  Person.h
    
    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    /*
    {
        @public
        int _age;
        int age;
    }
     */
    
    /*
     从Xcode4.4以后apple对@property进行了一个增强, 以后只要利用一个@property就可以同时生成setter/getter方法的声明和实现
     没有告诉@property要将传入的参数赋值给谁, 默认@property会将传入的属性赋值给_开头的成员变量
     
     @property有一个弊端: 它只会生成最简单的getter/setter方法的声明和实现, 并不会对传入的数据进行过滤
     如果想对传入的数据进行过滤, 那么我们就必须重写getter/setter方法
     如果不想对传入的数据进行过滤, 仅仅是提供一个方法给外界操作成员变量, 那么就可以使用@property
     
     如果利用@property来生成getter/setter方法, 那么我们可以不写成员变量, 系统会自动给我们生成一个_开头的成员变量
     注意: @property自动帮我们生成的成员变量是一个私有的成员变量, 也就是说是在.m文件中生成的, 而不是在.h文件中生成的
     */
    // age? _age; _age
    /*
     - (void)setAge:(int)age;
     - (int)age;
     */
    @property int age;  //就可以使用[p setAge:-88],[p age],因为自动生成了这些get,set方法。
    
    @end
    //  Person.m
    
    #import "Person.h"
    
    @implementation Person
    
    /*
     - (void)setAge:(int)age
     {
        _age = age;
     }
     - (int)age
     {
        return _age;
     }
     */
    
    // 如果重写了setter方法, 那么property就只会生成getter方法
    // 如果重写了getter方法, 那么property就只会生成setter方法
    // 如果同时重写了getter/setter方法, 那么property就不会自动帮我们生成私有的成员变量,就要自己重新定义变量。
    /*- (void)setAge:(int)age
    {
        if (age < 0) {
            age = 0;
        }
        _age = age;
    }
    
    - (int)age
    {
        return _age;
    }*/
    @end
    //
    //  main.m
    //  Property增强
    
    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
        Person *p = [Person new];
        [p setAge:-88];
        NSLog(@"age = %i", [p age]);
        NSLog(@"_age = %i, age = %i", p->_age, p->age);//私有的
        return 0;
    }
  • 相关阅读:
    LeetCode 40. 组合总和 II(Combination Sum II)
    LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
    LeetCode 60. 第k个排列(Permutation Sequence)
    LeetCode 47. 全排列 II(Permutations II)
    LeetCode 46. 全排列(Permutations)
    LeetCode 93. 复原IP地址(Restore IP Addresses)
    LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)
    LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
    一重指针和二重指针
    指针的意义
  • 原文地址:https://www.cnblogs.com/yaowen/p/7413938.html
Copyright © 2020-2023  润新知