- 3
- 0
- 约4.71万字
- 约 50页
- 2021-11-12 发布于广东
- 举报
1. 回答person的retainCount值,并解释为什么
Person * per = [[Person alloc] init]; 此时 person
的retainCount的值是 1 self.person = per; 在
self.person 时,如果是 assign,person的 retainCount
的值不变 ,仍为 1 若是 :retain person的retainCount的
值加 1,变为 2 若是 :copy person的retainCount值不
变 ,仍为 1
2、 这段代码有什么问题吗 : @implementation
Person - (void)setAge:(int)newAge {
self.age = newAge; }
@end
会死循环 ,会重复调用自己 !self.age 改为_age即可 ;
并且书写不规范 :setter方法中的 newAge应该为 age
3、这段代码有什么问题 ,如何修改 for (int i = 0; i
someLargeNumber; i++) { NSString *string =
@”Abc ”;string = [string lowercaseString]; string
= [string stringByAppendingString:@xyz];
NSLog(@“%@” , string); } 会出现内存泄露 修
改之后 : for(int i = 0; i1000;i++){
NSAutoreleasePool * pool1 = [[NSAutoreleasePool
alloc] init]; NSString *string = @Abc; string =
[string lowercaseString]; string = [string
stringByAppendingString:@xyz];
NSLog(@%@,string);
// 释放池
[pool1 drain]; }
延伸 :堆栈的区别 :
(1)管理方式 :对于栈来讲 ,是由编译器自动管理 ,无
需我们手工控制 ;对于堆来说 ,释放工作由程序员控
制 ,容易产生 memory leak。 (2) 申请大小 :能从栈获
得的空间较小 ,堆是向高地址扩展的数据结构 ,是不
连续的内存区域。堆的大小受限于计算机系统中
有效的虚拟内存。由此可见 ,堆获得的空间比较灵
活 ,也比较大。 (3)碎片问题 :对于堆来讲 ,频繁的
new/delete势必会造成内存空间的不连续 ,从而造成
大量的碎片 ,使程序效率降低。 对于栈来讲 ,则不会
存在这个问题 ,因为栈是先进后出的队列 ,他们是如
此的一一对应 ,以至于永远都不可能有一个内存块
从栈中间弹出 (4)分配方式 :堆都是动态分配的 ,没
有静态分配的堆。 栈有 2种分配方式 :静态分配和动
态分配。 静态分配是编译器完成 的,比如局部变量
的分配。动态分配由 alloca函数进行分配 ,但是栈
的动态分配和堆是不同的 ,他的动态分配是由编译
器 进行释放 ,无需我们手工实现。 (5)分配效率
您可能关注的文档
最近下载
- 可摘局部义齿修复工艺技术——第十章义齿带入后问题分解.pptx VIP
- 2025年江西新能源科技职业学院单招职业技能测试题库及答案1套.docx VIP
- 胶合板行业的生产管理流程.docx VIP
- 学前儿童家庭与社区教育慕课版全套教学课件.pptx
- 2022年-2024年青岛卫健委事业编护理笔试真题.docx VIP
- 汉责文化打屁股.pptx VIP
- 可摘局部义齿修复工艺技术应用第十章义齿带入后问题-.pptx VIP
- 2025年浙江省公务员省考《行测》联考真题(A类)(含答案).docx VIP
- 2《宁夏闽宁镇昔日干沙滩,今日金沙滩》公开课一等奖创新教案+(共40张)+随堂练习(含答案).docx VIP
- 全新世中期西辽河流域聚落选址与环境解读.pdf VIP
原创力文档

文档评论(0)