Le 12 nov. 2011 à 03:34, Charles Srstka a écrit :

> On Nov 11, 2011, at 8:22 PM, Wim Lewis wrote:
> 
>> On Nov 11, 2011, at 5:49 PM, Nathan Sims wrote:
>>> Newb question. I need to create an OS X Cocoa library that is going to be 
>>> called from a C program. The C program's interface will be simple, along 
>>> the lines of:
>>> 
>>> retval=get_float_data(&float1,&float2);
>>> 
>>> where get_float_data() is a function that resides in the Cocoa library and 
>>> invokes Objc code to generate and return two float values to the caller.
>>> 
>>> I'm unclear on how to architect this. Can a C function invoke Objc methods? 
>>> (OSX 10.6.8, Xcode 3.2.6)
>> 
>> Yes. There's no real barrier between the two (even less of a barrier than 
>> there is between C and C++). Everything works as you'd expect.
>> 
>> Unless your calling program is being invoked from other ObjC code (like an 
>> application's event loop), you may want to put an autorelease pool and an 
>> exception-catching block in the called C function. The autorelease pool will 
>> make sure that temporary objects created in the ObjC code get deallocated 
>> when get_float_data() returns, and although exceptions can propagate through 
>> C functions you probably want to convert them into an error code or exit(1)  
>> or something.
>> 
>> int get_float_data(float *result1, float *result2)
>> {
>> NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
>> @try {
>>  [objcCode call];
>>  *result1 = [more stuff];
>>  etc.;
>> } @catch {
>>  fprintf(stderr, "omg doomed!\n");
>>  etc.;
>> } @finally {
>>  [pool drain];
>> }
>> 
>> return blahblah;
>> }
> 
> In this day and age, you should probably just use @autoreleasepool instead of 
> NSAutoreleasePool:
> 
> int get_float_data(float *result1, float *result2)
> {
>       @autoreleasepool {
>               [objcCode call];
>               *result1 = [more stuff];
>               etc.;
>       }
>       
>       return blahblah;
> }


Note that this code is not equivalent with the previous one. @autoreleasepool 
does not drain on exception.

-- Jean-Daniel




_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to