我想在发送通知时传递一些数据,数据是包含本地通知信息的字典。
- (void)application:(UIApplication *)application
didReceiveLocalNotification:(UILocalNotification *)notification {
NSString *uuid = [NSString stringWithString:notification.userInfo[@"UUID"]];
NSDictionary *infoDic = @{
@"UUID" :uuid
};
if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) {
[[NSNotificationCenter defaultCenter]
postNotificationName:@"PopReminder"
object:nil
userInfo:infoDic];
}}
通知类似于notification.userInfo = @{ @"UUID" : list.itemKey }。
list.itemKey是一个字符串,用于标识特定的列表。
NSUUID *uuid = [[NSUUID alloc] init]; NSString *key = [uuid UUIDString]; list.itemKey = key;
但是,在使用泄漏进行测试时,它会显示导致内存泄漏的NSString对象。一个类方法如何会导致内存泄漏,并且它正在使用ARC。有人能帮我找到解决办法吗?谢谢。

以另一种方式解决了问题,但仍不清楚泄漏的原因:
- (void)application:(UIApplication *)application
didReceiveLocalNotification:(UILocalNotification *)notification {
NSString *uuid;
NSArray *lists = [YYList MR_findAll];
for (YYList *list in lists) {
if ([list.itemKey isEqualToString:notification.userInfo[@"UUID"]]) {
uuid = [list.itemKey copy];
}
}
if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) {
[[NSNotificationCenter defaultCenter]
postNotificationName:@"PopReminder"
object:nil
userInfo:@{
@"UUID" :uuid
}];
}}
以这种方式,它工作得很好。但是仍然想知道为什么不能直接使用[notification.userInfo@"UUID“拷贝]来传递数据。在泄漏中,它表明这是一个泄漏循环,也许这是一条线索,表明我错过了什么。如果是这样的话,UILocalNotification‘通知’和NSNotification 'PopReminder‘会以何种方式相互保留呢?
发布于 2015-11-04 15:56:39
在传入的userInfo上不需要进行任何重新处理。你可以直接传下去。
与此同时,仪器正在告诉你,在那里创建的对象最终被泄露了。这意味着捕捉到PopReminder的人正在导致对象泄漏。在那里调查。尽管您的任意[NSString stringWithString:]没有任何需要,但它并不无效。
以下内容如下:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) {
[[NSNotificationCenter defaultCenter]
postNotificationName:@"PopReminder"
object:nil
userInfo:notification.userInfo];
}
}..。是您提供的方法的完美、完整版本。
https://stackoverflow.com/questions/33521534
复制相似问题