IONotificationPortDestroy - to call or not to call?
===

I have code to set up notification for USB device add/remove using XCode 4.3.3 on OS X 10.7.4. For a USB device with myVid and myPid, it is pretty boilerplate:

    // Global declarations somewhere near the top of the file.  
    IONotificationPortRef g_notificationPort= NULL;  
    io_object_t g_notification= 0;  
    io_iterator_t g_iteratorAdded= 0; 
    .
    .
    .
    - (BOOL)setupDeviceNotification  
    {  
    // Set up matching dictionary.  
    NSMutableDictionary* matchingDictionary= (NSMutableDictionary*)IOServiceMatching(kIOUSBDeviceClassName);  
    [matchingDictionary setObject:[NSNumber numberWithLong:myVid] forKey:[NSString stringWithUTF8String:kUSBVendorID]];  
    [matchingDictionary setObject:[NSNumber numberWithLong:myPid] forKey:[NSString stringWithUTF8String:kUSBProductID]];  
    
    // Create a run loop source for the notification object.  
    g_notificationPort= IONotificationPortCreate(kIOMasterPortDefault);  
    CFRunLoopSourceRef notificationRunLoopSource= IONotificationPortGetRunLoopSource(g_notificationPort);  
    CFRunLoopAddSource(CFRunLoopGetCurrent(), notificationRunLoopSource, kCFRunLoopDefaultMode);  
    
    // Set up a notification callback for device addition on first match.  
    kern_return_t kRet= IOServiceAddMatchingNotification(g_notificationPort, kIOFirstMatchNotification, (CFMutableDictionaryRef)matchingDictionary, deviceAddedCallback, (void*)self, &g_iteratorAdded);  
    
    // Rudimentary error handling.  
    if(KERN_SUCCESS != kRet)  
    {  
      [matchingDictionary release];  
      return FALSE;  
    }  
    
    // Arm the notification and check for existing devices.  
    [self deviceWasAdded:g_iteratorAdded];  
    
    return TRUE;
    }

This code works well, and when a device is added, I use IOServiceAddInterestNotification using the IONotificationPortRef and store the io_object_t that is set in a global object.

Upon analyzing this code to do a little refactoring (making the globals into object variables in the class), I realized I am never calling IONotificationPortDestroy on my IONotificationPortRef object. Should I call it? Also, I am not doing anything with the io_object_t that is assigned in IOServiceAddInterestNotification - is there any cleanup required there?

 