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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SQL%NOTFOUND_oracle导出sql文件

    SQL%NOTFOUND_oracle导出sql文件SQL%NOTFOUND是一个布尔值。与最近的sql语句(update,insert,delete,select)发生交互,当最近的一条sql语句没有涉及任何行的时候,则返回true。否则返回fal

    2022年8月4日
    4
  • java删除文件目录及文件_Java删除文件,目录

    java删除文件目录及文件_Java删除文件,目录java删除文件目录及文件TodaywewilllookintoJavadeletefileandjavadeletedirectoryexamples.Earlierwelearnedhowtocreateafileinjava.今天,我们将研究Java删除文件和Java删除目录示例。之前我们学习了如何在java中创建文件。Java删除文件…

    2022年6月6日
    91
  • jquery怎么写ajax_js中ajax写法

    jquery怎么写ajax_js中ajax写法一、第一种:$.post("url",{"func":"getNameAndTime"},function(data,status){ },"json");二、第二种$.ajax({type:"GET",url:"",data:{},

    2022年9月30日
    4
  • django动态路由_路由器和转换器的区别

    django动态路由_路由器和转换器的区别自定义路径转换器有时候上面的内置的url转换器并不能满足我们的需求,因此django给我们提供了一个接口可以让我们自己定义自己的url转换器django内置的路径转换器源码解析在我们自定义路由转

    2022年7月30日
    7
  • Makefile教程(绝对经典,所有问题看这一篇足够了)「建议收藏」

    Makefile教程(绝对经典,所有问题看这一篇足够了)「建议收藏」该篇文章为转载,是对原作者系列文章的总汇加上标注。支持原创,请移步陈浩大神博客:http://blog.csdn.net/haoel/article/details/2886makefile很重要   什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefil…

    2022年5月14日
    33
  • linux中的ldd命令简介

    linux中的ldd命令简介在linux中,有些命令是大家通用的,比如ls,rm,mv,cp等等,这些我觉得没有必要再细说了。而有些命令,只有开发人员才会用到的,这类命令,作为程序员的我们,是有必要了解的,有的甚至需要熟练使用。有的人总说,这些命令不重要,用的时候去查就行了,这么多么扯淡的说法啊。具体用法细节是可以可查,但至少得知道有ldd这个东西吧。连ldd都不知道,怎么知道ldd是干啥的呢?

    2022年4月28日
    77

发表回复

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

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