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


相关推荐

  • RGB颜色值转十六进制颜色值

    RGB颜色值转十六进制颜色值

    2021年8月31日
    66
  • 数论狄利克雷定理_shx函数

    数论狄利克雷定理_shx函数狄利克雷函数dirac在Matlab中使用Syntaxd=dirac(x)d=dirac(n,x)d=dirac(x)representstheDiracdeltafunctionofx.d=dirac(n,x)representsthenthderivativeoftheDiracdeltafunctionatx.dirac(t)这表示关于ttt的狄利克雷函数dirac(1,t)dirac(2,t)因此,这两个分别表示关于

    2025年9月5日
    5
  • 网络打印机计算机服务,如何把局域网中的所有计算机及打印机设置共享?

    网络打印机计算机服务,如何把局域网中的所有计算机及打印机设置共享?实现打印机共享常用的方式有两种 常规的共享方式和网络打印服务器 网络打印服务器的大小与机顶盒差不多 用于将普通的 USB 接口的打印机改造成 网络打印机 并且可以实现跨网打印功能 方式 1 常规的打印机共享常规的打印机共享方式 开启电脑的共享功能 实现打印机的共享 这种方式经常用于办公室打印机共享 不能跨网段 跨 VLAN 使用 step1 设置打印机共享如下图所示 依次点击 开始 设备和打印机 找

    2025年9月24日
    5
  • 异步fifo的工作原理(netty异步方法)

    FPGA(一):异步FIFO实现(包含源码和仿真文件)一、异步FIFO的重要参数及其作用1、FIFO:FirstInputFirstOutput,即先入先出队列,本质是RAM。FIFO有几个最重要的参数:2、wr_clk:写时钟,所有与写有关的操作都是基于写时钟;3、rd_clk:读时钟,所有与读有关的操作都是基于读时钟;4、FIFO_WIDTH:FIFO的位宽,即FIFO中每个地址对应的数据的位宽;5、FIFO_DEPTH:FIFO的深度,即FIFO中能存入多少个(位宽为FIFO_

    2022年4月13日
    129
  • day08(异常处理,创建异常,finally,throws和throw的区别)

    day08(异常处理,创建异常,finally,throws和throw的区别)

    2022年3月6日
    55
  • oracle触发器实例

    oracle触发器实例最近有一个需求,一个数据库的表在插入和删除的时候另外一个数据库中的表也做相应的操作。我的想法是1.首先两个数据库可以连接,通过dblink可以解决。2.建立插入和删除才能触发的触发器。直接上代码createorreplacetriggersynch_useridafterinsertordeleteoneosoperatorFOREACHROW–每一行触发一次…

    2022年7月27日
    10

发表回复

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

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