iOS 程序内存指针和对象的理解,赶紧收藏备战金三银四

  • 因为obj1生成的默认的为强引用(__strong),在超出if的作用域之后,obj1所持有的对象被释放,

  • obj0为弱引用,所以obj0不持有对象,在obj1对象释放后,obj0自动的被赋值为nil

  • 弱引用的特性是,不持有对象,即便是写成id __weak obj1 = [[NSObject alloc] init];

  • 此代码系统会给与警告,因为这里obj1被声明成弱引用,那么在赋值之后,alloc出来的对象会被立即释放。

*/

三、@property的修饰属性

1.atomic与nonatomic

atomic:默认是有该属性的,这个属性是为了保证程序在多线程情况,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题。

nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率。

2.readwrite与readonly

readwrite:这个属性是默认的情况,会自动为你生成存取器。

readonly:只生成getter不会有setter方法。

readwrite、readonly这两个属性的真正价值,不是提供成员变量访问接口,而是控制成员变量的访问权限。

3.strong与weak

strong:强引用,也是我们通常说的引用,其存亡直接决定了所指向对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示在列表中,则此对象会被从内存中释放。

weak:弱引用,不决定对象的存亡。即使一个对象被持有无数个弱引用,只要没有强引用指向它,那么还是会被清除。

strong与retain功能相似;weak与assign相似,只是当对象消失后weak会自动把指针变为nil;

4.assign、copy、retain

assign:默认类型,setter方法直接赋值,不进行任何retain操作,不改变引用计数。一般用来处理基本数据类型。

retain:释放旧的对象(release),将旧对象的值赋给新对象,再令新对象引用计数为1。我理解为指针的拷贝,拷贝一份原来的指针,释放原来指针指向的对象的内容,再令指针指向新的对象内容。

copy:与retain处理流程一样,先对旧值release,再copy出新的对象,retainCount为1.为了减少对上下文的依赖而引入的机 制。我理解为内容的拷贝,向内存申请一块空间,把原来的对象内容赋给它,令其引用计数为1。对copy属性要特别注意:被定义有copy属性的对象必须要 符合NSCopying协议,必须实现- (id)copyWithZone:(NSZone *)zone方法。

也可以直接使用:

使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)

使用copy: 对NSString

使用retain: 对其他NSObject和其子类

5.getter setter

getter:是用来指定get方法的方法名

setter:是用来指定set访求的方法名

在@property的属性中,如果这个属性是一个BOOL值,通常我们可以用getter来定义一个自己喜欢的名字,例如:

@property (nonatomic, assign, getter=isValue) boolean value;

@property (nonatomic, assign, setter=setIsValue) boolean value;

四、深拷贝和浅拷贝

浅拷贝:我自己的理解是指针拷贝,指向单元地址不拷贝。

深拷贝:即内存地址的拷贝,拥有新的单元地址,内容为原来内存单元的内容。(必须实现NSCopying 里copyWithZone)

别用字符串测试,自己写一个类测试。。字符串真是个奇怪的对象,观察不了他的逻辑。

retain strong 都是浅拷贝

copy是深拷贝

#import <Foundation/Foundation.h>

@interface copyObj : NSObject

@end

#import “copyObj.h”

@implementation copyObj

-(id)copyWithZone:(NSZone *)zone{

copyObj * copyZone =[[self class] allocWithZone:zone];

return copyZone;

}

@end

#import <UIKit/UIKit.h>

#import “copyObj.h”

@interface ViewController : UIViewController

@property(nonatomic,copy)copyObj * a;

@property(nonatomic,strong)copyObj * b;

@end

copyObj * c = [[copyObj alloc]init];

NSLog(@“%p–%x”,c,&c);

self.a=c;

NSLog(@“%p–%x”,_a,&_a);

self.b=c;

NSLog(@“%p–%x”,_b,&_b);

结果如下:

2017-02-25 17:14:09.324 test[14251:807504] 0x60800000da40–5267bae8
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

结尾

学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

资料领取方式:戳这里免费获取

学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

资料领取方式:戳这里免费获取

html5

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值