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.局限性

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

  • 相关阅读:
    C#获取根目录的方法集合
    C# 获取文件MD5值的方法
    VS2015 搭建 Asp.net core 开发环境
    【Networking】容器网络大观 && SDN 资料汇总
    【Networking】flannel,pipework,weave,udp,vxlan,ovs等资料
    【K8s】Kubernetes 最近正在看的资料
    【GoLang】go 微服务框架 && Web框架学习资料
    【Eclipse】eclipse che 协作开发
    【Kubernetes】两篇文章 搞懂 K8s 的 fannel 网络原理
    【SpringBoot】SpringBoot 入门示例
  • 原文地址:https://www.cnblogs.com/huangyi-427/p/4599876.html
Copyright © 2011-2022 走看看