zoukankan      html  css  js  c++  java
  • OC基础 @Property几种属性

     mrc模式下

    person.h

    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    /*
     @propety
     1.原子性 :atomic 线程安全 (默认)
                nonatomic 执行速度更快
     
     2.对象的所有权
     assign 基本数据类型 基本赋值操作 (默认)
     retain  获取对象所有权
     copy 将复制一个新对象
     
     
     3.生成存取方法的控制
     
     readwrite、 两种方法都生成 (默认)
     readonly、 只生成getter方法
     
     
     */
    
    
    // mrc
    @interface Person : NSObject
    // 对象 retain 字符串 assgin
    @property(nonatomic,retain) NSString* name;
    -(instancetype)ininWithName:(NSString*)n;
    -(void)show;
    
    @end

    person.m

    #import "Person.h"
    //@synthesize name=_name;
    @implementation Person
    
    
    //assgin
    //-(void)setName:(NSString*)n
    //{
    //    _name=n;
    //
    //}
    
    //retain
    //-(void)setName:(NSString*)n
    //{
    //if(_name!=n) 判断两个对象是不是一个对象
    //{
    //   [_name release]; 释放旧对象
    //   _name=[n retain]; 获取新对象的所有权
    //
    //}
    //}
    
    //copy
    //-(void)setName:(NSString*)n
    //{
    //if(_name!=n) 判断两个对象是不是一个对象
    //{
    //   [_name release]; 释放旧对象
    //   _name=[n copy]; 复制出一个新对象
    //
    //}
    //}
    
    
    -(instancetype)ininWithName:(NSString*)n
    {
        self=[super init];
        if(self)
        {
    //        _name=n; //assign 没有对象全权限 mrc
            _name=[n retain]; //retain 如果一个类有一个对象成员 在使用指针使用retain 方法
        }
        return self;
    }
    
    -(void)show
    {
        NSLog(@"name:%@",_name);
    }
    
    -(void)dealloc
    {
        [_name release];
        [super dealloc];
    }
    @end

    main

    #import <Foundation/Foundation.h>
    #import "Test.h"
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
    
    //
    //        // oc中可变对象适用于引用计数 不可变对象不可用于引用计数
    //        // 常量字符串
            //1. 使用常量字符串
            Person* p =[[Person alloc]ininWithName:@"zhangsan"];
            [p show];
    //         2.可变字符串
            
            NSMutableString* str1=[[NSMutableString alloc]initWithString:@"zhangsan"];
            NSLog(@"retaincount=%lu",[str1 retainCount]);
            Person* p2=[[Person alloc]ininWithName:str1];
            NSLog(@"retaincount=%lu",[str1 retainCount]);
            [str1 release];
            NSLog(@"retaincount=%lu",[str1 retainCount]);
            [p2 show];
            
            //3.
             NSMutableString* str2=[[NSMutableString alloc]initWithString:@"lisi"];
            
            /*
             -(void)setName:(NSString*)n
             {
             if(_name!=n)
             {
                [_name release];
                _name=[n retain];
             
             }
             }
             泄漏 str1
             
             */
                   
            
            [p2 setName:str2];
            [str2 release];
            
            [p2 show];
    
            [p2 release];
            
            
    //        NSLog(@"retainCount=%lu",[str1 retainCount]);
            
          
        }
        return 0;
    }

    ARC

    /*arc中的property属性
     生成setter方法的类型:
     strong 强引用  retained 获取对象的所有权
     unsafe_unretained 赋值。assign 赋值
     weak 弱引用。当原始对象被小销毁后自动变成nil
    A类。                B类
    B类对象成员 _b        A类对象成员 _a
    A* a;
    B* b;
     a.b =b;
     b.a=a;
    交叉引用:如果两个对象分别包含彼此的强引用, 会出现无法销毁的对象 因此使用到了弱引用
    
     */
    
    /*
     OC中的内存释放原则
     1.谁创建 谁释放 :使用alloc copy nutablecopy 开头创建的对象都需要自己释放
     2.使用retain获得的对象所有权,在不用了之后也要释放掉
     3.不是上边两条得到的对象,不要去释放它 (否则会造成过度释放)
     
     */
    
    /*
     
     什么是延迟释放。解决:自动释放池
     通过类方法创建的对象
     NSString* str1=[NSString stringWithFormat:@"%d",10]
     
     */
    //@property(nonatomic,strong)NSString* name;
    //@property(nonatomic,unsafe_unretained)int age;
  • 相关阅读:
    AFNetworking 3.0中调用[AFHTTPSessionManager manager]方法导致内存泄漏的解决办法
    UITableView自动计算cell高度并缓存
    iOS 10 应用内跳转到系统设置
    iOS 系统通知
    UITableViewDataSource TableView數據源協議
    HADOOP操作权限问题
    Echarts简单图表
    hadoop常见错误解决方法
    sqoop安装与简单实用
    hive的内置函数和自定义函数
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/13257930.html
Copyright © 2011-2022 走看看