zoukankan      html  css  js  c++  java
  • Objective-C 点语法 成员变量的作用域 @property和@synthesize关键字 id类型

    点语法

    1.利用点语法替换set方法和get方法

    方法调用

    Student *stu = [Student new];

    [stu setAge : 18];

    int age = [stu age];

    点语法

    stu.age = 18;

    int age = stu.age;

    2.点语法的本质

    其实点语法的本质还是方法调用

    当使用点语法的时候 编译器会自动展开成相应的方法

    3.死循环注意

    - (void) setAge : (int) age {
        self.age = age;//会引起死循环
    }
    
    - (int) age {
        return self.age;//会引起死循环
    }

    成员变量的作用域

    @private: 只能在当前类的对象方法中直接访问

    @protected: 可以在当前类及子类的对象方法中直接访问

    @public: 任何地方都可以直接访问

    @package: 同一个'体系内'(框架)可以访问 介于@private和@public之间

    @property和@synthesize关键字

    1.@property用在@interface中 用来自动生成set和get的声明

    #import <Foundation/Foundation.h
    
    @interface Person : NSObject {
        int _age;
    }
    //- (void) setAge : (int) age;
    //- (int) age;
    @property int age;//一定不能带_ 注意我的命名规范
    @end 

    2.@synthesize用在@implementation中 用来自动生成set和get的实现

    @implementation Person
    //- (void) setAge : (int) age {
    //    _age = age;
    //}
    //- (int) age {
    //    return _age;
    //}
    @synthesize age = _age;//注意我的命名规范
    @end

    3.@synthesize的细节

    A: @synthesize age = _age;

    set和get实现中会访问成员变量_age 如果成员变量_age不存在 就会自动生成一个@private的成员变量_age

    B: @synthesize age;

    set和get实现中会访问成员变量age 如果成员变量age不存在 就会自动生成一个@private的成员变量age

    C: 手动实现

    若手动实现了set方法 编译器就只会自动生成get方法

    若手动实现了get方法 编译器就只会自动生成set方法

    若同时手动实现了set和get方法 编译器就不会自动生成不存在的成员变量

    4.@property 新特性

    自从Xcode4.x后 @property就独揽了@synthesize的功能 也就是说 @property可以同时生成set和get的声明和实现

    默认情况下 set和get方法中的实现 回去访问下划线'_'开头的成员变量

    id类型

    1.简介

    万能指针 能指向任何OC对象 相当于NSObject * 

    2.使用

    id p = [Person new];//注意: id后面不要加 *

    3.局限性

    调用一个不存在的方法 编译器会马上报错

  • 相关阅读:
    win10系统许可证即将过期的解决方法
    python中unicode转中文
    tesseract下载
    镜像访问GitHub
    软件体系架构的质量属性
    架构漫谈读后感
    架构漫谈(一)
    机器学习十讲02
    IntelliJ IDEA免费激活与基础配置
    gitlab安装(centos 8)
  • 原文地址:https://www.cnblogs.com/huangyi-427/p/4599876.html
Copyright © 2011-2022 走看看