zoukankan      html  css  js  c++  java
  • OC基础(15)

    @property参数

    本小节知识点:

    1. 【掌握】控制set方法的内存管理
    2. 【掌握】控制需不需要生成set方法
    3. 【掌握】多线程管理

    4. 【掌握】控制set方法和get方法的名称

    1.控制set方法的内存管理

    • retain : release旧值,retain新值(用于OC对象)
    • assign : 直接赋值,不做任何内存管理(默认,用于非OC对象类型)
    • copy : release旧值,copy新值(一般用于NSString *)

    2.控制需不需要生成set方法

    • readwrite :同时生成set方法和get方法(默认)
    • readonly :只会生成get方法

    3.多线程管理

    • atomic :性能低(默认)
    • nonatomic :性能高

    4.控制set方法和get方法的名称

    • setter : 设置set方法的名称,一定有个冒号:
    • getter : 设置get方法的名称

    • 注意: 不同类型的参数可以组合在一起使用

    @Property练习

    本小节知识点:

    1. 【掌握】@Property练习

    1.@Property练习

    • 微博类(Status)

      • 文字内容(text)
      • 配图(picture)
      • 发表时间(createTime)
      • 作者(author)
      • 转发的说说(repostStatus)
      • 评论数(commentCount)
      • 转发数(retweetCount)
      • 赞数(likeCount)
    • 作者类(Author)

      • 昵称(name)
      • 头像(icon)
      • 生日(birthday)
      • 账号(account)
    • 账号(Account)

      • 账号名称(name)
      • 账号密码(pwd)
      • 账号注册时间(registerTime)

         

    模拟场景:
    * 老王在2010-1-1 17:56:34注册了一个账号
    (名称:xiaomage@520it.com, 密码:haomage)
     * 老王的生日是1986-3-8 18:18:18
     * 老王发布一条说说
         * 文字内容  @“爆米花手机比逼格更有逼格”
         * 图片 @“phone.png”
         * 发表时间: 2015-6-20 10:23:23
         * 作者: 老王
         * 被转发的说说: 没有
         * 评论数: 100
         * 转发数: 90
         * 点赞数: 200
    
     * 王大锤在2012-8-8 19:26:54注册了一个账号
     (名称:dachuimeimei@520it.com, 密码:654321)
     * 王大锤的生日是1989-9-6 14:16:28
     * 王大锤在2015-6-21 20:47:09时,转发了张三之前发布的说说, 并且还附带了一句话:@“真的很有逼格”

    @class

    本小节知识点:

    1. 【掌握】@class基本概念
    2. 【掌握】@class其它应用场景
    3. 【掌握】@class和#import

    1.@class基本概念

    • 作用

      • 可以简单地引用一个类
    • 简单使用

      • @class Dog;
      • 仅仅是告诉编译器:Dog是一个类;并不会包含Dog这个类的所有内容
    • 具体使用

      • 在.h文件中使用@class引用一个类
      • 在.m文件中使用#import包含这个类的.h文件

    2.@class其它应用场景

    • 对于循环依赖关系来说,比方A类引用B类,同时B类也引用A类
    • 这种嵌套包含的代码编译会报错
    #import "B.h"
    @interface A : NSObject
    {
        B *_b;
    }
    @end
    
    #import “A.h"
    @interface B : NSObject
    {
        A *_a;
    }
    @end
    
    • 当使用@class在两个类相互声明,就不会出现编译报错
    @class B;
    @interface A : NSObject
    {
        B *_b;
    }
    @end
    
    @class A;
    @interface B : NSObject
    {
        A *_a;
    }
    @end

    3.@class和#import

    • 作用上的区别

      • #import会包含引用类的所有信息(内容),包括引用类的变量和方法
      • @class仅仅是告诉编译器有这么一个类, 具体这个类里有什么信息, 完全不知
    • 效率上的区别

      • 如果有上百个头文件都#import了同一个文件,或者这些文件依次被#import,那么一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新编译一遍 , 编译效率非常低
      • 相对来讲,使用@class方式就不会出现这种问题了

    README

    循环retian

    本小节知识点:

    1. 【掌握】循环retian基本概念

    1.循环retian基本概念

    • 循环retain的场景

      • 比如A对象retain了B对象,B对象retain了A对象
    • 循环retain的弊端

      • 这样会导致A对象和B对象永远无法释放
    • 循环retain的解决方案

      • 当两端互相引用时,应该一端用retain、一端用assign

  • 相关阅读:
    第2课 C 到 C++ 的升级
    第1课 学习 C++ 的意义
    归并排序
    插入排序与希尔排序
    选择排序
    冒泡排序
    CodeSignal 刷题 —— almostIncreasingSequence
    CodeSignal 刷题 —— matrixElementSum
    Python3 序列解包
    单星号变量(*)和双星号变量(**)的用法
  • 原文地址:https://www.cnblogs.com/zhoudaquan/p/5016912.html
Copyright © 2011-2022 走看看