作者zonble (zonble)
看板MacDev
标题Re: [问题]ARC下 内存崩溃
时间Fri Dec 4 01:31:13 2015
※ 引述《boy19931118 (boy19931118)》之铭言:
: 我有一个Navigation
: A写了自定义Button Push View B
: UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
: bundle: nil];
: LocationWebView *lvc = [storyboard
: instantiateViewControllerWithIdentifier:@"LocationWebView"];
: [self.navigationController pushViewController:lvc animated:YES];
: 程式码大概是这样 因为MAC暂时不在身边 无法拿自己的程式码
: 而B也写了一个返回Button
: [[self navigationController] popViewControllerAnimated:YES];
: 但是返回A後 B的内存并没有被释放 所以只要不停的A>B>A>B>A>B
: 使用记忆体就会持续上升
: 希望能指点一下
你可能先确定是不是 B 没有被释放,记忆体上升有很多种原因,
不见得是 B 造成的。你可以试试看在 B class 中先写一个空的 dealloc
然後在 dealloc 的地方打一个 break point,看看是否真的没有呼叫到。
如果 B 真的没有被释放,就是有别的地方 retain 了 B。常见
有几种可能:
1. 是不是 A 还有其他 property 指向 B?
2. B 有没有哪些 property 是 block,而 block 里头呼叫了 self?
3. B 里头有没有 timer 物件的 target 是 self,而在离开 B
的时候没有停止 timer?timer 的 target 会被 timer
retain 一份,而如果 view controller 有 timer 的话,
我们就不该把 invalidate timer 写在 dealloc 的地方,而是
要写在 viewDidDisappear 之类的地方。
: 问题二 -------------------------------
: 或许这部分我应该自己去处理
: 要是您太热心的话 就回答吧
: 对於@property (XXX,XXX)
: 我应该怎麽判断 什麽样的物件 适合选择什麽样的计数器?
: 现阶段而言 所需要的东西都是网路上复制的.....
你的意思是是用 strong、weak、assign 吗?
1. 是 objetive-c 物件的话,除了 delegate,都用 strong
2. delegate 用 weak
3. 是 block 就用 copy
4. 是 C 的 primitive types 的变数就用 assign
: 问题三 ------------------------------------
: 两个StoryBoard之间 要传递参数 该采用哪种方法?
: 我目前大多都使用 extern 来传递
: 但缺点是 必须在程式第一个.h档内就宣告好
: 好像不太符合逻辑
: 也有使用过Userdefault来存取
: 这个好像适用於存取使用者设定之类的比较妥当
: 而近日才知道 delegate 委派
: 好像也有用类别来传取的方法
: 请问各位大多都使用哪种方法?
呃,你的意思是,你都用 global variable 来传递东西?@_@
然後我猜你说「用类别来传取」大概是 singleton。
如果两个物件之间没有直接的 reference,然後还要交换资料,
大概来说还有其他几种方法,比方说透过 NSNotificationCenter,
这样 B class 假如订阅了某个属於 A class 的 notificaiton,
当某个 A 的 instance 发送 notification 的时候,B class
的 instance 就算无法跟任何 A class 的 instance 之间有任何
reference,都还是可以收得到。
另外一种方法是透过 UIPasteboard XD,你可以尝试建立一个只有
你自己知道名字的剪贴簿,然後用平常用在复制/贴上的这层 API
来传递资料,这种作法不但可以跨 Storyboard,还可以直接跨 App
而且就算重新开机,剪贴簿里头的资料也不会被清掉。 :p
--
zonble.net
cocoa.zonble.net
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.249.116.128
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MacDev/M.1449163876.A.646.html
1F:推 boy19931118: 非常感谢回答 我再试着尝试看看 12/04 12:54
2F:推 charlesdc: 请问Z大,那个剪贴簿会在什麽情况下被清除? 12/05 12:37
3F:→ uranusjr: 你或使用者 copy/cut 新资料的时候就会被覆盖掉 12/05 12:44
4F:推 charlesdc: 感谢U大 12/05 12:47