张超超OC基础回顾_05 property修饰符,id类型,instancetype。。。

一、property

如果给一个属性同时提供了getter/setter方法, 那么我们称这个属性为可读可写属性

如果只提供了getter方法, 那么我们称这个属性为只读属性

如果只提供了setter方法, 那么我们称这个属性为只写属性

如果既没有提供getter也没有提供setter方法, 那么我们称这个属性为私有属性

格式:

@property(属性修饰符) 数据类型 变量名称;

@property(readwrite) int age;   // 可读可写的 ,不用写的  默认就是这
/*
 - (void)setHeight:(double)height;
 - (double)height;

 - (void)setHeight:(double)height;
 - (double)abc;
 */
@property(getter=abc) double height;

/*
 - (void)setWeight:(double)weight;
 - (void)tiZhong:(double)weight;
 */
@property(setter=tiZhong:) double weight;
// readonly: 代表只生成getter方法不生成setter方法
@property(readonly) NSString * name;

// 是否已婚
// 程序员之间有一个约定, 一般情况下获取BOOL类型的属性的值, 我们都会将获取的方法名称改为isXXX,这样方便沟通,可读性也好点
@property(getter=isMarried) BOOL married;

 二、id类型

这个会用就行了,一般是用于多态的时候,我也没乱用过,不然这玩意编译不报错,到时候不好找,直接拷贝概念了

/*
id是一个数据类型, 并且是一个动态数据类型
     既然是数据类型, 所以就可以用来
     1.定义变量
     2.作为函数的参数
     3.作为函数的返回值

     默认情况下所有的数据类型都是静态数据类型
     静态数据类型的特点:
     在编译时就知道变量的类型,
     知道变量中有哪些属性和方法
     在编译的时候就可以访问这些属性和方法,
     并且如果是通过静态数据类型定义变量, 如果访问了不属于静态数据类型的属性和方法, 那么编译器就会报错

     动态数据类型的特点:
     在编译的时候编译器并不知道变量的真实类型, 只有在运行的时候才知道它的真实类型
     并且如果通过动态数据类型定义变量, 如果访问了不属于动态数据类型的属性和方法, 编译器不会报错

     id == NSObject * 万能指针
     id和NSObject *的区别:
     NSObject *是一个静态数据类型
     id  是一个动态数据类型
*/
// 通过静态数据类型定义变量, 不能调用子类特有的方法
    // 通过动态数据类型定义变量, 可以调用子类特有的方法
    // 通过动态数据类型定义的变量, 可以调用私有方法

    // 弊端: 由于动态数据类型可以调用任意方法, 所以有可能调用到不属于自己的方法, 而编译时又不会报错, 所以可能导致运行时的错误
    // 应用场景: 多态, 可以减少代码量, 避免调用子类特有的方法需要强制类型转换
    id obj = [Person new];
    [obj sleep];
    [obj test];
    [obj eat];

    id obj2 = [Student new];
    [obj2 eat];
    [obj2 test];

    // 为了避免动态数据类型引发的运行时的错误, 一般情况下如果使用动态数据类型定义一个变量, 在调用这个对象的方法之前会进行一次判断, 判断当前对象是否能够调用这个方法
//    id obj = [Person new];
    id obj = [Student new];
  // 先判断一下
    if ([obj isKindOfClass:[Student class]]) {
        // isKindOfClass , 判断指定的对象是否是某一个类, 或者是某一个类的子类
        [obj eat];
    }
时间: 2024-10-25 05:25:36

张超超OC基础回顾_05 property修饰符,id类型,instancetype。。。的相关文章

张超超OC基础回顾01_类的创建,申明属性,以及本质

1.如何编写类的声明 以@interface开头 , 以@end结尾, 然后再class name对应的地方写上 事物名称, 也就是类名即可 注意: 类名的首字符必须大写 声明一个类的目的就是为了告诉系统, 我们这个类中有哪些属性和行为 OC类声明中属性只能在写@interface和@end之间的{}中 注意: 编写OC类属性的时, 建议将所有属性的名称前面都加上"_",这个是规范,记住就行了. 类名后面的 :NSObject 是为了让我们的Iphone类具备创建对象的能力,也就是说,

张超超OC基础回顾02_成员变量(属性),局部变量,全局变量的区别

成员变量: 写在类声明的大括号中的变量, 我们称之为 成员变量(属性, 实例变量) 成员变量只能通过对象来访问 注意: 成员变量不能离开类, 离开类之后就不是成员变量 成员变量不能在定义的同时进行初始化 存储: 堆(当前对象对应的堆的存储空间中) 存储在堆中的数据, 不会被自动释放, 只能程序员手动释放 @interface Person : NSObject { int _age; NSString *_name; } @end  全局变量: 写在函数和大括号外部的变量, 我们称之为全局变量

OC继承以及实例变量修饰符

这里基本上跟java一样 所以就简单写几点要注意的: 1)OC与java一样都只支持单继承可以多层继承(java单继承多实现) 2) OC中的实例变量修饰符前要加 @ 例如 @private 例如下面一个问题  @private类型的变量,能否被子类继承     答案:当然是可以的,子类继承父类的一切,只不过不能访问而已

OC基础回顾(十四)文件加载与保存

Cocoa提供两个处理文件的通用类:属性列表和对象编码. 1.属性列表 在Cocoa中,有一个类名为属性列表(property list)的对象,通常简写为plist.这些列表包含 Cocoa知道如何操作的一组对象.具体来讲,Cocoa知道如何将它们保存到文件中并进行加载.属性列表类包括NSArray.NSDictionary.NSString.NSNumber.NSDate和NSData,以及它们的可修改形态变体(只要它们拥有前缀为Mutable的类). 1.1 NSDate NSDate是C

[基础重温]C#访问修饰符

public 同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员.  private 只有同一类或结构中的代码可以访问该类型或成员.  protected 只有同一类或结构或者此类的派生类中的代码才可以访问的类型或成员.  internal 同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以.  protected internal  由其声明的程序集或另一个程序集派生的类中任何代码都可访问的类型或成员.  从另一个程序集进行访问必须在类声明中发生,

java的基础语法(标识符 修饰符 关键字)

Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴.叫.吃等. 类:类是一个模板,它描述一类对象的行为和状态. 方法:方法就是行为,一个类可以有很多方法.逻辑运算.数据修改以及所有动作都是在方法中完成的. 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定. 基本语

JAVA_SE基础——59.权限访问修饰符

了解了包的概念,就可以系统的介绍Java中的访问控制级别.在Java中,针对类.成员方法和属性提供了四种访问级别,分别是private.default.protected和public. 权限访问修饰符(权限从大到小依次往右排)   public(公共) protected(受保护) default(缺省) private(私有) 同一个类 √ √ √ √ 同一个包 √ √ √ × 子父类 √ √ × × 不同包 √ × × × public 和 private 在这里我就不一一介绍了,想必大家

Solidity 基础知识之访问修饰符

pragma solidity ^0.4.24; //属性,函数,访问修饰符 //属性的默认访问修饰符是 internal, 函数的默认访问符是 public contract AttrFnDemo{ uint16 private _age;//private 仅仅当前合约可以访问 string internal _name;//internal 仅仅当前合约和当前合约的子合约可以访问 int public _num;// 外部可以调用 //函数名与合约名称相同,则此函数为构造函数 functi

java 基础 四种权限修饰符

/** * Java有四种权限修饰符: * public > protected > (default) > private * 同一个类 YES YES YES YES * 同一个包 YES YES YES NO * 不同包子类 YES YES NO NO * 不同包非子类 YES NO NO NO * * 注意:(default)并不是关键字default,而是什么都不写. */ 原文地址:https://www.cnblogs.com/mantishell/p/11801662.h