• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
__weak pointer collection firing prematurely???
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

__weak pointer collection firing prematurely???


  • Subject: __weak pointer collection firing prematurely???
  • From: Britt Durbrow <email@hidden>
  • Date: Mon, 13 Aug 2012 00:04:33 -0700

I am looking at something very strange. I have a document object, that has an object that it owns; which has a __weak pointer back to the document object. Another object also has an indirect pointer to the document object. So, something like this:

@interface MyDoc : NSDocument
{
	MySubObj *subObj;
}
@end

@interface MySubObj : NSDocument
{
	@public
		__weak MyDoc *doc;
}
@end

@interface SomeOtherObject : NSObject
{
	MySubObj *subObj;
}
@end

During the execution of MyDoc's init method, an instance of MySubObj is created, and stored in the document's ivar. During MySubObj's init method, the __weak pointer back to the document object is set. This seems to work OK - I've traced it thru in the debugger. Then, an instance of SomeOtherObject is created, and it's subObj ivar is set. Again, works OK. The next thing SomeOtherObject does is to load a local variable with a reference to the document object, by copying it out of MySubObj's public __weak doc pointer.

OK, now the strange part: performing that copy causes the __weak doc ivar to get zeroed. I''ve watched it in the debugger; before executing that line of code, it's got the right value; after, it's nil. Changing __weak to __unsafe_unretained makes the problem go away.

This is the exact line of code in question:

TrDocument *document=(TrDocument *)__RPCPersistentInfo__pool->document;

The document object in question is, when this happens, still in the middle of it's init method when that __weak __RPCPersistentInfo__pool->document variable gets zeroed out.

Has anyone ever seen anything remotely like this? How and why is it happening on a *read*, of all places (I would have expected it to occur on a scope transition, where ARC would have possibly fired to do a release)? And do I need to worry about other places where I'm using __weak?

Oh, and this is on 10.8, with Xcode 4.4.1.

ANY insight would be much appreciated!
_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: __weak pointer collection firing prematurely???
      • From: Britt Durbrow <email@hidden>
    • Re: __weak pointer collection firing prematurely???
      • From: Quincey Morris <email@hidden>
  • Prev by Date: Re: How do I get memory usage numbers?
  • Next by Date: Re: __weak pointer collection firing prematurely???
  • Previous by thread: Re: How do I get memory usage numbers?
  • Next by thread: Re: __weak pointer collection firing prematurely???
  • Index(es):
    • Date
    • Thread