[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Wrapping C functions
From: |
David Chisnall |
Subject: |
Re: Wrapping C functions |
Date: |
Thu, 6 Aug 2009 21:30:50 +0100 |
On 6 Aug 2009, at 20:56, Martin Kalbfuß wrote:
Thank you David. That helped a lot. I decided to have a global
library object
created with load.
You don't need a global library object; put the initialisation in the
+initialize method for a class that is responsible for creating the
library context. Or put it in the -init method for a singleton object.
But how to release it? Currently I set an atexit function in the
load method
which calls the release method of the class. But is there an
Objective-C
way?
Why do you need to release it? If it's something that needs explicit
cleanup then the user should release it. If you are using AppKit then
you can register an observer for the notification that is sent before
an app exists, but your other email indicated that you are just using
Foundation. In this case, you should probably stick with atexit() if
you really need cleanup.
Another point is that I want to forbid the instanciation of the
class. I
think a singleton is the right way to go. But how can I create a
singleton,
when I cannot hide methods?
The traditional approach is to provide a +sharedInstance method and
put in the documentation that people should call this instead. If you
want, you can override +allocWithZone: to look a bit like this:
static id sharedInstance;
+ (void)initialize
{
if (self == [YourClassName class])
{
sharedInstance = [self new];
}
}
+ (id)allocWithZone: (NSZone*)aZone
{
if (nil != sharedInstance)
{
return sharedInstance;
}
return [super allocWithZone: aZone];
}
This will allocate the shared instance when class receives the first
message and return it whenever the class receives a +alloc message.
It's not a very good solution; you also need to protect -init to make
sure that someone who does alloc/init they are not reinitialising the
object and clearing all of the ivars. Generally, just putting
something in the documentation saying people should use
+sharedInstance is enough.
David
- Wrapping C functions, Martin Kalbfuß, 2009/08/06
- Re: Wrapping C functions, David Chisnall, 2009/08/06
- Re: Wrapping C functions, Martin Kalbfuß, 2009/08/06
- Re: Wrapping C functions, David Chisnall, 2009/08/06
- Re: Wrapping C functions, Martin Kalbfuß, 2009/08/06
- Re: Wrapping C functions,
David Chisnall <=
- Re: Wrapping C functions, Martin Kalbfuß, 2009/08/06
- Re: Wrapping C functions, David Chisnall, 2009/08/06
- Re: Wrapping C functions, Martin Kalbfuß, 2009/08/06
- Re: Wrapping C functions, Martin Kalbfuß, 2009/08/06
- Re: Wrapping C functions, David Chisnall, 2009/08/06
- Re: Wrapping C functions, Martin Kalbfuß, 2009/08/06
- Re: Wrapping C functions, Martin Kalbfuß, 2009/08/07