【问题标题】:modalViewController not dealocs with ARCmodalViewController 不与 ARC 解除分配
【发布时间】:2023-03-07 13:44:01
【问题描述】:

我以模态方式代表的视图控制器永远不会重新分配它总是存在的(通过仪器中的计数看到)。

我在这个网站上看到了类似的问题,答案是“你应该找到指向模态视图控制器的强对象”

我找不到,请帮帮我 这是我的代码:

这里我要求模态视图:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self dismissKeyboard];
    [self CheckAndStore:indexPath.row];
    NSLog(@"At Select");
    self->DetailsView = [[InfoViewController alloc]initWithParameter:[PersonsFromSearch objectAtIndex:indexPath.row]];
    DetailsView.delegate = self;
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    [self presentViewController:DetailsView animated:YES completion:nil];
}

在模态视图中:

-(void) Back
{
     NSLog(@"Back Clicked");
     [self dismissViewControllerAnimated:NO completion:nil];
}

initWithParameter:

- (id) initWithParameter:(id)parameter
{
    Dict = parameter;
    return self;
}

内部 detailsView.h

     @interface InfoViewController : UIViewController <UITableViewDelegate,     UITableViewDataSource , UISearchBarDelegate
,MFMessageComposeViewControllerDelegate,MFMailComposeViewControllerDelegate>
    {
        id<InfoViewControllerDelegate> __weak delegate;
        NSDictionary *Dict;
        …
    }
    @property (weak, nonatomic) id <InfoViewControllerDelegate> delegate; 
    ...

DetailsView 是一个 iVar(会不会有问题?)

如果需要更多代码,请告诉我,我会发布(我是 iOS 开发的新手)。

【问题讨论】:

    标签: ios modalviewcontroller memory-management


    【解决方案1】:

    您应该将DetailsView 中的delegate 声明为weak 以避免强引用循环。当你想要释放它时,需要将你的 self-&gt;DetailsView 设置为 nil。因为如果你还持有它的强引用,它怎么会被释放呢?

    【讨论】:

    • 我用该代表的定义更新了问题,它很弱(我猜)。
    • 我可以在 back 函数中执行此操作吗? (因为我不知道在父母看来什么时候会被解雇)?
    • @Roma-MT 如果在你的展示视图控制器中你只使用self-&gt;DetailsView,你不需要声明它来持有一个强引用。然后,当您解雇时,它将被释放。如果您需要它用于其他用途,您可以使用委托方法通知您的呈现视图控制器告诉它解雇我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多