Objective-C —点语法 (梳理整理)

Objective-C —点语法 (梳理整理)

@property就是oc中常用的点语法,用起来十分简单。

应用@property (nonatomic, copy, readwrite, setter=setMyName:) NSString *string

1.点语法究竟是什么

举例说明吧


@property (nonatomic,strong)NSString* string;


上面这一句,等于下面这几句


{NSString* _string; 声明一个成员属性
}

– (NSString *)string  这个成员属性的读(get) 方法和实现

-(void)setString:(NSString *)string 这个成员属性的写(set)方法和实现


这样就很容易的可以看出,这样对于写程序来说省了很多事情

点语法中的(修饰符)

1.原子性atomict/nonatomic

所谓原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会切换到另一个线程。很明显nonatomic,也就是原子性的执行效率高;

2.读写操作readwrite,readonly

3.给set方法和get方法起别名 setter = set的方法名, getter = get的方法名;

4.内存管理相关

assign简单赋值,不更改索引计数 

retain释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1

copy  建立一个索引计数为1的对象,然后释放旧对象

strong引用计数+1

weak防止循环使用 如代理的时候

很明显这里涉及到了oc的内存管理;

oc的内存管理思路是这样的:(这里想要知道更多的话,要去学习MRC模式,本人水平有限,加之刚接触就用上了ARC,使用MRC模式要加-fno-objc-arc ,哎,都是惰性啊,不过思路是知道的)

就像是一个办公室的开灯问题;

1.第一个办公室的人打开灯->引用计数器+1  开灯即开拓内存空间

2.第二个第三个人来办公室,->引用计数器+1  灯已经打开,不必打开了。 即不必开拓内存,直接指向原内存空间就好

3.灯开的时候,有人离去; ->引用计数器-1,最后一个人关灯,关灯即释放,

 

最后写一个懒加载的例子来加深一下点语法的理解

懒加载:当使用到的时候才取创建,这样可以节省内存空间

        假如你有兴趣打下面这些代码。你会发现,_array  和 self.array 在我的这一段代码中是不能更换的,不报错,但是程序跑起来你会发现的。


@property (nonatomic,strong)NSMutableArray *array;

-(NSMutableArray *)array{

    if (!_array) {

        _array = [[NSMutableArray alloc]init];

//        _array 去取保存的数据

    }

    return _array;

}

UITableView的代理方法中

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    return self.array.count;

}


 

 

转载于:https://my.oschina.net/adso/blog/679256

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109007.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm-professional-2021.7.16 激活码(注册激活)

    (pycharm-professional-2021.7.16 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月20日
  • 数列极限定义详解「建议收藏」

    数列极限定义详解「建议收藏」数列极限的定义个人感觉不太好理解,我看了两天的教程才彻底明白数列极限的定义。在一般的教材里数列极限的定义为这说的比较抽象,我半天都理解不了N是怎么来的,n与N有什么区别,为什么要用去减a,这里我对自己的疑问做了个总结。首先是为什么要用去减a,两个数之间的接近程度可以用两个之差的绝对值来度量,差值越小,两个数就越接近(说法来源于《高等数学》同济大学)。两个数的接近程度小于任给的正数​…

    2022年4月29日
  • 【Hive】SQL语句大全

    【Hive】SQL语句大全文章目录库操作创建数据库查询数据库修改数据库删除数据库表操作创建表查看表修改表删除表内部表(管理表)和外部表两者的区别互相转换分区表创建分区表添加分区往分区表中添加数据查询分区表数据删除分区查看分区修复分区数据操作数据导入Load导入Insert插入Import导入数据查询基本查询Floor取整Like和RlikeDistinct去重GroupBy分组查询Having语句Join语…

    2022年5月19日
  • spring-schedul实现动态添加定时任务

    spring-schedul实现动态添加定时任务

    2021年7月12日
  • atitit.获取北京时间CST 功能api总结 O7

    atitit.获取北京时间CST 功能api总结 O7

    2022年1月23日
  • es6类型转换_es6转换es5

    es6类型转换_es6转换es5>虽然我觉得没什么用,但是记一下吧[TOC]####1.新建项目项目目录结构:![](https://box.kancloud.cn/1e80da2d1c4c01681a65023089a9f18a_229x108.png)####2.src中的**index.js**为你写的es6语法代码我们例子写:“`letb=1;console.log(b);constname=”…

    2022年9月24日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号