当前位置: 首页 > news >正文

软件网站怎么做seo代码优化步骤

软件网站怎么做,seo代码优化步骤,网站策划专有技术,四川网站建设公司 会员登录文章目录 OC对象 - Block解决循环引用前言1. 循环引用示例1.1 分析 2. 解决思路3. ARC下3.1 __weak3.2 __unsafe_unretained3.3 __block 4. MRC下4.1 __unsafe_unretain....4.1 __block 5. 总结5.1 ARC下5.2 MRC下 OC对象 - Block解决循环引用 前言 本章将会通过一个循环引用…

文章目录

  • OC对象 - Block解决循环引用
    • 前言
    • 1. 循环引用示例
      • 1.1 分析
    • 2. 解决思路
    • 3. ARC下
      • 3.1 __weak
      • 3.2 __unsafe_unretained
      • 3.3 __block
    • 4. MRC下
      • 4.1 __unsafe_unretain....
      • 4.1 __block
    • 5. 总结
      • 5.1 ARC下
      • 5.2 MRC下

OC对象 - Block解决循环引用

前言

本章将会通过一个循环引用案例,分析其原因,以及在ARCMRC下的解决方案

1. 循环引用示例

ZSXperson

@interface ZSXPerson : NSObject@property (nonatomic, assign) int age;
@property (nonatomic, copy) void(^block)(void);@end@implementation ZSXPerson- (void)dealloc {NSLog(@"ZSXPerson - %s", __func__);
}@end

main.m 中初始化ZSXperson对象person,创建personblock,并在block里面访问person.age

int main(int argc, const char * argv[]) {@autoreleasepool {ZSXPerson *person = [[ZSXPerson alloc] init];person.block = ^ {NSLog(@"person.age is %d", person.age);};NSLog(@"---------------");}return 0;
}

运行:

person不会销毁

1.1 分析

  • 初始化ZSXperson对象person,然后将block赋值给personblock,此时person是强引用block
  • block中,访问了person.age,因为访问了局部变量,所以block捕获了person
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc -fobjc-arc -fobjc-runtime=ios-13.0.0 main.m -o main-arm64.cpp

  • 此时blockperson的关系,是相互持有的关系

2. 解决思路

之所以叫循环引用,其实就是相互之间的引用关系形成了环

解决方式就是,断开某个引用关系,打破这个环

3. ARC下

3.1 __weak

int main(int argc, const char * argv[]) {@autoreleasepool {ZSXPerson *person = [[ZSXPerson alloc] init];__weak typeof(person) weakPerson = person;person.block = ^ {NSLog(@"person.age is %d", weakPerson.age);};NSLog(@"---------------");}return 0;
}

person正常销毁的

3.2 __unsafe_unretained

int main(int argc, const char * argv[]) {@autoreleasepool {ZSXPerson *person = [[ZSXPerson alloc] init];__unsafe_unretained typeof(person) uuPerson = person;person.block = ^ {NSLog(@"person.age is %d", uuPerson.age);};NSLog(@"---------------");}return 0;
}

使用__unsafe_unretained也可以正常释放

__unsafe_unretained从命名看,unsafe代表不安全,unretained表示不会产生引用。不安全则表现在,当引用的对象销毁时,他不会把指针设置为nil,因此容易有坏指针异常

3.3 __block

int main(int argc, const char * argv[]) {@autoreleasepool {ZSXPerson *person = [[ZSXPerson alloc] init];person.age = 10;__block typeof(person) strongPerson = person;person.block = ^ {NSLog(@"person.age is %d", strongPerson.age);strongPerson = nil;};person.block();NSLog(@"---------------");}return 0;
}


使用__block正常销毁

需要注意的是,使用__block必须调用block。因为使用__block修饰后,在block里面需要置空,如果没有调用block,就没有置空操作,它依然是循环引用状态无法销毁

未调用block:

调用block后:

4. MRC下

MRC不支持__weak
改为MRC

4.1 __unsafe_unretain…

int main(int argc, const char * argv[]) {@autoreleasepool {ZSXPerson *person = [[ZSXPerson alloc] init];person.age = 10;__unsafe_unretained typeof(person) weakPerson = person;person.block = [^ {NSLog(@"person.age is %d", weakPerson.age);} copy];NSLog(@"---------------");[person release];}return 0;
}

正常销毁

4.1 __block

int main(int argc, const char * argv[]) {@autoreleasepool {ZSXPerson *person = [[ZSXPerson alloc] init];person.age = 10;__block typeof(person) weakPerson = person;person.block = [^ {NSLog(@"person.age is %d", weakPerson.age);} copy];NSLog(@"---------------");[person release];}return 0;
}

正常销毁

MRC下,block 里面无需将weakPerson设置为nil,也能正常释放。这是因为,MRC__block不会对person产生强引用(被__block修饰的对象类型,ARC时会retain,MRC时不会retain)

相当于这根线不生效,因此没有形成循环引用

5. 总结

5.1 ARC下

通常使用__weak来解决循环引用。使用__weak修饰的对象销毁后,指针会自动设置为nil__unsafe_unretained__block虽然也可以解决环引用问题,但是__unsafe_unretained在修饰的对象销毁后,指针不会自动设置为nil,因此如果还去使用这个对象就会出现异常。__block需要保证 block 有被调用,否则还是会循环引用。

5.2 MRC下

使用__unsafe_unretained或者__block

@oubijiexi

http://www.yayakq.cn/news/626249/

相关文章:

  • 信阳网站建设哪个好快速网站排名汉狮公司
  • 微信网站对接上海传媒公司招聘艺人
  • 建网站兴田德润php网站源代码
  • 如何建设网站公司网页设计的合适尺寸是多少
  • 12建网站门户网站的基本特征多选题
  • 深圳网站设计报价天津做一个简单的网站
  • 自己做网站处理图片用什么软件百度指数批量查询工具
  • 知名的电子商务网站如何登录中国建设银行网站
  • 成都网站定制中心收费wordpress主题排行
  • 网站建设文化信息网站开发人才储备
  • 做羞羞事免费网站seo案例分享
  • 企业网站建设心得免费文件外链网站
  • 郑州高端网站建设哪家好广东十大网站建设
  • 网站建设开发方式包括查询网站这么做
  • 怎么能创建自己的网站注册微信公众号流程
  • 谷歌网站质量指南智能网站价格
  • 创业过程中网站建设wordpress侧边栏目录菜单
  • 求个网站你明白的网页设计与制作心得体会800字
  • 建网站空间可以不买服务公司英文
  • 公司做网站是管理费用建设厅考试成绩查询
  • 网站建设 百度推广网站蓝色配色
  • 西宁微网站建设多少钱seo外包模板
  • 良精企业网站管理系统源码 后台不能编辑产品网站英文版怎么做
  • 如何做网站嵌入腾讯地图自助建站推广
  • 韩雪冬模板网站哈尔滨网站开发培训
  • 网站seo优化要怎么做线上投票怎么做
  • 万网建设网站宁波建设网表格
  • 书画网站建设方案策划企业网站建设设计
  • 怎么自己做网站框架徐州关键字优化公司
  • 怎么做离线网站社交网站平台怎么做