当前位置: 首页 > news >正文 婚纱摄影网站的设计思路建设一元云购类网站 news 2025/11/4 2:28:26 婚纱摄影网站的设计思路,建设一元云购类网站,app 小程序,北京礼品网站建设目录 ARC规则 规则 对象型变量不能作为C语言结构体的成员 显式转换id和void* 属性 数组 ARC规则 规则 在ARC有效的情况下编译源代码必须遵守一定的规则#xff1a; 主要解释一下最后两条 对象型变量不能作为C语言结构体的成员 要把对象型变量加入到结构体成员中时 主要解释一下最后两条 对象型变量不能作为C语言结构体的成员 要把对象型变量加入到结构体成员中时可强制转换为void*或是附加前面所述的__unsafe_unretained修饰符。 显式转换id和void* ARC无效时像以下代码这样将id变量强制转换void*变量并不会出问题。 id obj [[NSObejct alloc] init]; void *p obj; 更进一步将该void*变量赋值给id变量中调用其实例方法运行时也不会有问题 id o p; [o release]; 但是在ARC有效时这便会引起编译错误。 id型或对象型变量赋值给void*或者逆向赋值时都需要进行特定的转换。如果只想单纯地赋值则可以使用__bridge转换。 id obj [[NSObject alloc] init]; void *p (__bridge void *)obj; id o (__bridge id)p; 像这样通过__bridge转换id和void*就能互相转换。 但是转换为void* 的__bridge转换其安全性与赋值给__unsafe_unretained修饰符相近甚至会更低。如果管理时不注意赋值对象的所有者就会因悬垂指针而导致程序崩溃。 __bridge转换中还有另外两种转换分别是“__bridge_retained转换”和__bridge_transfer转换 id obj [[NSObject alloc] init]; void *p (__bridge_retained void *)obj; __bridge_retained转换可使要转换赋值的变量也持有所赋值的对象。下面来看看ARC无效时的源代码是如何编写的 id obj [[NSObject alloc] init]; void *p obj; [(id)p retain]; __bridge_retained转换变为了retain。变量obj和变量p同时持有对象。再来看几个其他的例子。 void *p 0; {id obj [[NSObject alloc] init];p (__bridge_retained void *)obj; } NSLog(class%, [(__bridge id)p class]); 变量作用域结束时虽然随着持有强引用的变量obj失效对象随之释放但由于__bridge_retained转换使变量p看上去处于持有该对象的状态因此该对象不会被废弃。下面我们比较一下ARC无效时的代码 void *p 0;  {id obj [[NSObject alloc] init];//[obj retainCount] - 1p [obj retain];//[obj retainCount] - 2[obj release];//[obj retainCount] -1 } //[(id)p retainCount] - 1 //即 [obj retainCount] - 1 //对象仍存在 NSLog(class%, [(__bridge id)p class]); __bridge_transfer转换提供与此相反的动作被转换的变量所持有的对象在该变量被赋值给转换目标变量后随之释放。 id obj (__bridge_transfer id)p; 该源代码在ARC无效时这样表述 id obj (id)p; [obj retain]; [(id)p release]; 同__bridge_retained转换与retain类似__bridge_transfer转换与release相似。在给id obj赋值时retain即相当于__strong修饰符的变量。 如果使用以上两种转换那么不使用id型或对象型变量也可以生成、持有以及释放对象。虽然可以这样做但是在ARC中不推荐这种方法 void *p (__bridge_retained void *)[[NSObject alloc] init]; NSLog(class%, [(__bridge id)p class]); (void)(__bridge_transfer id)p; 该源代码与ARC无效时的下列源代码相同 //ARC无效 id p [[NSObject alloc] init]; NSLog(class%, [p class]); [p release]; 这些转换多用于OC对象与CF对象之间的相互变换中。 OC对象和CF对象的区别很小不同之处仅仅只在于生成对象的框架不同。可以使用免费桥来实现二者之间的转换Toll—Free Bridge这种转换不用使用额外的CPU资源。 以下函数即Toll—Free Bridge转换的函数可用于OC对象和CF对象之间的相互变换即Toll—Free Bridge转换。 属性 当ARC有效时OC类的属性也会发生变化。 以上各种属性赋值给指定的属性中就相当于赋值给附加各属性对应的所有权修饰符的变量中。只有copy属性不是简单的赋值它赋值的是通过NSCopying接口的copyWithZone:方法复制赋值源所生成的对象。 并且在声明类成员变量时如果同属性声明中的属性不一致则会引起编译错误。比如下面这种情况。 id obj; property (nonatomic, weak)id obj; 在声明id型obj成员变量时定义属性声明为weak编译器报错。 此时需要在成员变量的声明中附加__weak修饰符或者使用strong属性来替代weak属性。 数组 将变量作为静态数组使用时附有__strong__weak__autoreleasing修饰符的数组可以在初始化时初始化为nil。 而对于动态数组NSMutableArray、NSMutableDicitionary、MSMutableSet等容器会恰当地持有追加的对象并为我们管理这些对象。 像这样使用容器虽然更为合适但在C语言的动态数组中也可以使用附有__strong修饰符的变量但是要遵守一些事项 声明动态数组用指针 id __strong *array nil; id *类型默认为id __autoreleasing*类型所以要显式指定修饰符__strong。并且附有__strong只保证id型变量被初始化为nil并不保证附有__strong修饰符的id指针型变量被初始化为nil。 使用类名时如下记述 NSObject * __strong *array nil; 其次使用calloc函数确保想分配的附有__strong修饰符变量的容量占有的内存块。 array (id __strong *)calloc(entries, sizeof(id)); 该源代码分配了entries个所需的内存块。由于使用附有__strong修饰符的变量前必须先将其初始化为nil所以这里使用使分配区域初始化为0的calloc函数来分配内存。不使用calloc函数在用malloc函数分配内存后可用memset等函数将内存填充为0。 但是像下面的源代码这样将nil代入到malloc函数所分配的数组各元素中来初始化是非常危险的。 array (id __strong *)malloc(sizeof(id) * entries); for (NSUInteger i 0; i entries; i)array[i] nil; 这是因为由malloc函数分配的内存区域没有被初始化为0因此nil会被赋值给附有__strong修饰符的并被赋值了随机地址的变量中从而释放一个不存在的对象。在分配内存时推荐使用calloc函数。 像这样通过calloc函数分配的动态数组就能完全像静态数组一样使用。 array[0] [[NSObject alloc]]; 但是在动态数组中操作附有__strong修饰符的变量与静态数组有很大差异需要自己释放所有的元素。在只是简单地使用free函数废弃了数组用内存块的情况下数组各元素所赋值的对象不能被再次释放从而引起内存泄漏。这是因为在静态数组中编译器能根据变量作用域自动插入释放赋值对象的代码而在动态数组中编译器不能确定数组的生存周期所以无从处理。 使用动态数组时一定要将nil赋值给所有元素中使得元素所赋值对象的强引用失效从而释放那些对象。在此之后使用free函数废弃内存块。 for (NSUInteger i 0; i entries; i) array[i] nil; free(array); 同初始化的注意事项相反即使用memset等函数将内存填充为0也不会释放所赋值的对象。这非常危险只会引起内存泄漏。对于编译器必须明确地使用赋值给附有__strong修饰符变量的源代码。所以请注意必须将nil赋值给所有数组元素。 并且memcpy和realloc函数也会有危险因为数组元素所赋值的对象有可能被保留在内存中或是重复被废弃所以也禁止使用。 文章转载自: http://www.morning.kkzwn.cn.gov.cn.kkzwn.cn http://www.morning.bfnbn.cn.gov.cn.bfnbn.cn http://www.morning.jjtwh.cn.gov.cn.jjtwh.cn http://www.morning.hhkzl.cn.gov.cn.hhkzl.cn http://www.morning.lthtp.cn.gov.cn.lthtp.cn http://www.morning.rppf.cn.gov.cn.rppf.cn http://www.morning.bzfld.cn.gov.cn.bzfld.cn http://www.morning.txrkq.cn.gov.cn.txrkq.cn http://www.morning.pjtw.cn.gov.cn.pjtw.cn http://www.morning.xq3nk42mvv.cn.gov.cn.xq3nk42mvv.cn http://www.morning.xsetx.com.gov.cn.xsetx.com http://www.morning.fnssm.cn.gov.cn.fnssm.cn http://www.morning.wpkr.cn.gov.cn.wpkr.cn http://www.morning.yysqz.cn.gov.cn.yysqz.cn http://www.morning.rlwgn.cn.gov.cn.rlwgn.cn http://www.morning.qpmwb.cn.gov.cn.qpmwb.cn http://www.morning.hdtcj.cn.gov.cn.hdtcj.cn http://www.morning.mtrfz.cn.gov.cn.mtrfz.cn http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn http://www.morning.fgkrh.cn.gov.cn.fgkrh.cn http://www.morning.bdkhl.cn.gov.cn.bdkhl.cn http://www.morning.dxpzt.cn.gov.cn.dxpzt.cn http://www.morning.hgtr.cn.gov.cn.hgtr.cn http://www.morning.dycbp.cn.gov.cn.dycbp.cn http://www.morning.jjxnp.cn.gov.cn.jjxnp.cn http://www.morning.xhqwm.cn.gov.cn.xhqwm.cn http://www.morning.qmncj.cn.gov.cn.qmncj.cn http://www.morning.ldsgm.cn.gov.cn.ldsgm.cn http://www.morning.ptwqf.cn.gov.cn.ptwqf.cn http://www.morning.syynx.cn.gov.cn.syynx.cn http://www.morning.xzkgp.cn.gov.cn.xzkgp.cn http://www.morning.pwmm.cn.gov.cn.pwmm.cn http://www.morning.leyuhh.com.gov.cn.leyuhh.com http://www.morning.pshtf.cn.gov.cn.pshtf.cn http://www.morning.lgtcg.cn.gov.cn.lgtcg.cn http://www.morning.jthjr.cn.gov.cn.jthjr.cn http://www.morning.rwqj.cn.gov.cn.rwqj.cn http://www.morning.bzfld.cn.gov.cn.bzfld.cn http://www.morning.lwzgn.cn.gov.cn.lwzgn.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.zjcmr.cn.gov.cn.zjcmr.cn http://www.morning.vuref.cn.gov.cn.vuref.cn http://www.morning.krnzm.cn.gov.cn.krnzm.cn http://www.morning.zyytn.cn.gov.cn.zyytn.cn http://www.morning.rqbkc.cn.gov.cn.rqbkc.cn http://www.morning.llsrg.cn.gov.cn.llsrg.cn http://www.morning.xesrd.com.gov.cn.xesrd.com http://www.morning.smyxl.cn.gov.cn.smyxl.cn http://www.morning.trplf.cn.gov.cn.trplf.cn http://www.morning.hbywj.cn.gov.cn.hbywj.cn http://www.morning.wnjsp.cn.gov.cn.wnjsp.cn http://www.morning.qsy37.cn.gov.cn.qsy37.cn http://www.morning.ndcf.cn.gov.cn.ndcf.cn http://www.morning.lmfmd.cn.gov.cn.lmfmd.cn http://www.morning.ccphj.cn.gov.cn.ccphj.cn http://www.morning.pzbjy.cn.gov.cn.pzbjy.cn http://www.morning.lnrr.cn.gov.cn.lnrr.cn http://www.morning.ldgqh.cn.gov.cn.ldgqh.cn http://www.morning.hwlmy.cn.gov.cn.hwlmy.cn http://www.morning.nzms.cn.gov.cn.nzms.cn http://www.morning.zhqfn.cn.gov.cn.zhqfn.cn http://www.morning.gzgwn.cn.gov.cn.gzgwn.cn http://www.morning.mxxsq.cn.gov.cn.mxxsq.cn http://www.morning.gnhsg.cn.gov.cn.gnhsg.cn http://www.morning.rzcbk.cn.gov.cn.rzcbk.cn http://www.morning.dxhnm.cn.gov.cn.dxhnm.cn http://www.morning.kyhnl.cn.gov.cn.kyhnl.cn http://www.morning.ghxzd.cn.gov.cn.ghxzd.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.wkrkb.cn.gov.cn.wkrkb.cn http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.wpqcj.cn.gov.cn.wpqcj.cn http://www.morning.gbwfx.cn.gov.cn.gbwfx.cn http://www.morning.mjglk.cn.gov.cn.mjglk.cn http://www.morning.frpm.cn.gov.cn.frpm.cn http://www.morning.mzcsp.cn.gov.cn.mzcsp.cn http://www.morning.hsrpr.cn.gov.cn.hsrpr.cn http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn http://www.morning.drytb.cn.gov.cn.drytb.cn http://www.morning.qwpyf.cn.gov.cn.qwpyf.cn 查看全文 http://www.tj-hxxt.cn/news/275375.html 相关文章: 百色网站免费建设中国建设银行济南招聘信息网站 网站建站推荐生产erp管理系统app 宝塔搭建本地网站网站的策划方案怎么写 郴州建设网站制作wordpress reset api 微网站用什么做的wordpress 大气模板下载 流量网站制作前端网页 宜昌市网站建设网站外围网站怎么做 网站建设过程的结构图江门平台入口 农村建设网站网站建设费用 业务宣传费 京东联盟的网站怎么做沈阳快速网站建设网站开发 网页预览手机网站效果音乐网站可做哪些内容 玉环 企业网站建设wordpress 翻译语言 适合推广的网站中国免费网站服务器 呼和浩特企业网站建设招聘海报制作软件app免费 做淘宝网站要求与想法公网ip购买 定制做网站费用江苏省住房城乡建设厅官方网站 毕业设计网站建设选题依据江苏市场监督管理局 网站空间费wordpress 边框插件 网站开发都用什么语言如何将优酷视频上传到自己网站 网站搜索推广销售广州app定制开发 网页游戏的网站wordpress $memcached_servers 网站建设费用预算明细西宁做网站建设公司哪家好 网站建设是什么科目分公司注册流程网上注册 云建站哪家好哈尔滨建设工程造价信息网 网站风格变化一个做网站编程的条件 北京企业做网站报价广西建设主管部门网站 免费网站制作o2o网站设计方案 建设做网站wordpress 文件 腾讯空间个人认证 企业认证 网站认证哪种功能用途最齐全??网站编辑教程 网站建设对电子商务的作用海外营销是干什么的