zoukankan      html  css  js  c++  java
  • 黑马程序员——ARC机制总结和用ARC建立模型

    ARC 全称:Automatic Reference Counting

    使用ARC 只需要在建立一个新的项目的时候把 下面的√打上

    Xcode5以后都会默认建议开发者使用ARC机制

    新的项目中如果有部分文件不想使用ARC就 在Build Phases中找到那个文件 后面修改成-fno-objc-arc

    就得项目中如果有部分文件想使用ARC就 Build Phases中找到那个文件 后面修改成-f-objc-arc

    在使用了ARC开发程序中不能再出现release或者autorelease 否则就报错

     源码:http://www.jinhusns.com/Products/Download/?type=xcj

    如果想把整个就项目直接转化成ARC就 点Edit -》Refactor-》Counvert to OC ARC

    1.ARC特点

    1> 不允许调用release、retain、retainCount

    2> 允许重写dealloc,但是不允许调用[super dealloc]

    3> ARC的判断准则:只要没有强指针指向对象,就会释放对象

    2 @property的参数

    * strong :成员变量是强指针(适用于OC对象类型)

    * weak :成员变量是弱指针(适用于OC对象类型)

    * assign : 适用于非OC对象类型

    * 以前的retain改为用strong

    指针分2种:

    1> 强指针:默认情况下,所有的指针都是强指针 __strong

    2> 弱指针:__weak

    // *错误写法(没有意义的写法)

    __weak Person *p = [[Person alloc] init];

    // *循环引用时的解决方法

    一端改成strong 一端改成retain

    在学习了ARC的知识之后 发现代码又再次精简了许多,完全不用管内存管理里的事了,就像MJ老师说的苹果 想让程序员的100%的经历 都放在业务上而不是抽出50%放在内存管理上。 代码有五个时段

    时段一:刚开始是所有set和get都要自己写,内存管理全部自己写。

    时段二:有了@property自动生成声明 和 @synthesize自动生成实现

    时段三:@property包含了 自动声明实现的功能 只写这一个就够了

    时段四:出了autorelease ,不用再关心release 和 程序中的代码的先后关系了,有了自动缓冲池@autorelesepool,只要写了autorelease 它会在程序代码块之后自动全部释放。

    时段五:有了ARC之后什么都不管了。

    然后老师讲了一个建立一个模型建立的是 新浪微博转发状态的模型,我在看懂之后自己也尝试着建立了一个模型

    是品牌下有自己的产品 一个品牌的产品可以加工另一个公司的产品

    我建立的是一个是富士康公司生产出手机值900元 然后苹果加工后就成了iphone值5688元

    下面是代码

    main.m

    //

    //  main.m

    //  Model

    //

    //  Created by 董 尚先 on 14-10-9.

    //  Copyright (c) 2014年 dsx. All rights reserved.

    //

    #import <Foundation/Foundation.h>

    #import "Brand.h"

    #import "Product.h"

    int main()

    {

    // 创立一个苹果公司

    Brand *b1 = [[Brand alloc]init];

    b1.name = @"apple";

    // 创立一个富士康公司

    Brand *b2 = [[Brand alloc]init];

    b2.name = @"fushikang";

    // 富士康生产一个手机啊

    Product *p1 = [[Product alloc]init];

    p1.name = @"phone";

    p1.price = 900.00;

    p1.brand = b2;

    // 苹果以那个为原材料加工一下

    Product *p2 = [[Product alloc]init];

    p2.name = @"iphone";

    p2.RawProduct = p1;

    p2.price = 5688.88;

    p2.brand = b1;

    return 0;

    }

    Brand.h  // 品牌类

    //

    //  Brand.h

    //  Model

    //

    //  Created by 董 尚先 on 14-10-9.

    //  Copyright (c) 2014年 dsx. All rights reserved.

    //

    #import <Foundation/Foundation.h>

    typedef struct {

        int year;

        int month;

        int day;

    } Date;

    @interface Brand : NSObject

    // 建立品牌的名称

    @property (nonatomic, strong) NSString *Name;

    // 建立这个品牌的创立时间

    @property (nonatomic, assign) Date SinceTime;

    // 建立一个品牌Logo 存放资源的URL

    @property (nonatomic, strong) NSString *Logo;

    // 建立一个总部电话 用字符串存储

    @property (nonatomic, strong) NSString *Centerphone;

    // 此品牌旗下的产品数量

    @property (nonatomic, assign) int OwnProductNumber;

    @end

    Product.h  //产品类

    //

    //  Product.h

    //  Model

    //

    //  Created by 董 尚先 on 14-10-9.

    //  Copyright (c) 2014年 dsx. All rights reserved.

    //

    #import <Foundation/Foundation.h>

    @class Brand;

    @interface Product : NSObject

    // 产品的名称

    @property (nonatomic, strong) NSString *Name;

    // 产品的效果图

    @property (nonatomic, strong) NSString *Photo;

    // 产品所属公司

    @property (nonatomic, strong) Brand *brand;

    // 产品的原材料

    @property (nonatomic, strong) Product *RawProduct;

    // 产品的价格

    @property (nonatomic, assign) double price;

    @end

    然后 Brand.m 和 Product.m 都是自动生成的里面代码没啥意义就不发了。

    ARC的功能很强大,我们这批学ios的程序员是赶上好时候了啊,估计苹果以后还会出各式各样的方便自动生成的方法。一起期待吧。

  • 相关阅读:
    Oracle中创建视图
    SQL Server 2012 Express安装图解
    oracle学习笔记
    Oracle中视图的创建和处理方法
    DDL、DML和DCL的理解
    ROS学习--如何结合launch文件使用参数服务器
    stm32多块开发板can总线互联卡死问题
    ROS CAN总线设备接入(二)can总线数据提取和以ros topic形式发布
    ROS CAN总线设备接入(一)Linux动态库的显式调用
    ROS .so载入undefined reference to `dlopen'问题
  • 原文地址:https://www.cnblogs.com/xiaoxiaojia/p/5488346.html
Copyright © 2011-2022 走看看