Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3341122
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 18, 20262026-05-18T00:41:12+00:00 2026-05-18T00:41:12+00:00

Here is a an interesting problem. I have a view controller, let’s call it

  • 0

Here is a an interesting problem. I have a view controller, let’s call it MyViewController. One of it’s members is a a custom view, let’s call that MyCustomView. MyCustomView also has a reference to its parent, MyViewController, since MyViewController is used as a delegate for the custom view. The problem occurs when MyViewController is unloaded, say due to a memory warning. Here is what happens:

First, viewDidUnload is called for MyViewController. It looks something like this:

- (void)viewDidUnload {
[super viewDidUnload];
    self.myCustomView = nil;
    self.someData = nil;
    ...
}

When self.myCustomView = nil is executed, it triggers myCustomView to be deallocated. MyCustomView’s dealloc routine looks something like this:

- (void)dealloc {
    ...
    [delegate release];
    ...
    [super dealloc];
}

Recall from above that the delegate is MyViewController. If MyCustomView were released first, this would not be a problem, as the reference count for MyViewController would be greater than 1, but in this case MyViewController already has no other references to it. This causes MyViewController to be released, namely it’s dealloc routine is called, which looks like:

- (void)dealloc { 
    [myCustomView release];
    [somedata release];
    ...
    [super dealloc];
}

As you can see, the members of MyViewController, namely, “somedata” get release BEFORE the viewDidUnload routine for MyViewController ever completes. As the dealloc routines for MyViewController and MyCustomView complete and we get back to finishing the viewDidUnload routine, we get to the line

self.somedata = nil;

Now, somedata is not nil but its value has already been release! This causes an exception.

This seems to be a critical flaw in reference counting. How do you deal with two-way references in objects like this that cause each other to be deallocated?

One answer is to always set the members to be nil in the dealloc routine. I don’t like that answer. It’s a lot of extra work and shouldn’t be necessary most of the time. The other answer is to rearrange the order of viewDidUnload so that deallocation of child objects which may have backwards pointers always happens at the end. I don’t like this solution either and it might not even work some of the time.

How do you get around this problem?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-18T00:41:12+00:00Added an answer on May 18, 2026 at 12:41 am

    delegate members typically aren’t reference counted. Typically the declaration is:

    @property(nonatomic, assign) id<UITableViewDelegate> delegate
    

    If you make your delegate like this you wont have the problem. And it should be safe since the parent view controller is only around as long as the child view – yes?

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

He're an interesting problem that looks for the most Pythonic solution. Suppose I have
Here's an interesting question. I have a system that attempts to run some initialization
Here is an interesting piece of code that my fellow team members were just
Here's an interesting problem. On a recently installed Server 2008 64bit I opened IE
Here's a basic regex technique that I've never managed to remember. Let's say I'm
Here's a problem I ran into recently. I have attributes strings of the form
Here is the issue I am having: I have a large query that needs
Here's my scenario - I have an SSIS job that depends on another prior
Here's an interesting puzzle. I downloaded Snippet Compiler to try some stuff out, and
There is an interesting post over here about this, in relation to cross-application flow

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.