• 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
Re: Can't use +initialize, now what?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Can't use +initialize, now what?


  • Subject: Re: Can't use +initialize, now what?
  • From: Alastair Houghton <email@hidden>
  • Date: Thu, 30 Mar 2017 10:47:32 +0100

On 29 Mar 2017, at 21:17, Jens Alfke <email@hidden> wrote:
>
>> On Mar 29, 2017, at 10:52 AM, Quincey Morris <email@hidden> wrote:
>>
>> If willFinishLaunching is not early enough, then you can put code in your “main” function, but I don’t know how feasible that is in Swift.
>
> Another trick to run stuff earlier at launch is to add an -awakeFromNib method to your app delegate, or any other object in your main nib. This can be dangerous, though, because you can’t count on any other object in the nib already being awoken, since the -awakeFromNib methods are called in random order. (I once had a very hard to debug intermittent crash due to an ordering dependency between two -awakeFromNib methods.)

It’s also important to note that your -awakeFromNib method may be invoked more than once, in particular if the object is the owner of a nib file, *and* it can sometimes be invoked at surprising moments (for instance, a recent auto layout problem in iDefrag turned out to be caused by the initial layout pass triggering -outlineView:viewForTableColumn:item:, which in turn caused a nib to load for the view, triggering an -awakeFromNib call *before the “normal” -awakeFromNib for the object in question* and worse, that -awakeFromNib was called *during layout*, and did things that triggered re-layout; the resulting layout glitch was quite hard to track down).  The upshot is that it isn’t necessarily even sufficient to ensure that your -awakeFromNib remembers whether you’ve initialised your object; you need to be very careful about what can trigger it and under what circumstance.

Kind regards,

Alastair.

--
http://alastairs-place.net


_______________________________________________

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


References: 
 >Can't use +initialize, now what? (From: Daryle Walker <email@hidden>)
 >Re: Can't use +initialize, now what? (From: Quincey Morris <email@hidden>)
 >Re: Can't use +initialize, now what? (From: Jens Alfke <email@hidden>)

  • Prev by Date: Re: Unicode filenames with Apple File System and UIManagedDocument
  • Next by Date: Re: Can't use +initialize, now what?
  • Previous by thread: Re: Can't use +initialize, now what?
  • Next by thread: Re: Can't use +initialize, now what?
  • Index(es):
    • Date
    • Thread