• 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: Non-NSObject object and garbage collection
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Non-NSObject object and garbage collection


  • Subject: Re: Non-NSObject object and garbage collection
  • From: "Oleg Krupnov" <email@hidden>
  • Date: Wed, 13 Aug 2008 07:22:24 +0300

On Wed, Aug 13, 2008 at 6:56 AM, Ken Ferry <email@hidden> wrote:
> What does the stack look like when you break on
> auto_refcount_underflow_error?  After you break, you can do "call
> (void)CFShow(<number goes here>)" with the number printed out in the
> log message.  That should hopefully give you the type of the object,
> which might help you determine where the issue is.


Actually, I don't know how to "break on something". Would you please
tell me? Also, I have always been wondering how do I set compiler
flags in XCode...

> What do you mean when you say that only one object causes the problem?
>  If that means you know what object it is, then can you show the code
> where you work with it?

I mean that when the function gets first executed in debugger, I
record on paper all the hex addresses of the few objects I create, and
then when the error is issued later on, I check the address and see
what is the object by its address.

Here's the code. It is a voyeur-like pdf parser.

CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)pdfData);
if (provider != nil)
{
       CFMakeCollectable(provider);
       CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(provider);
       if (document != nil)
       {
               CFMakeCollectable(document);
               size_t pageCount = CGPDFDocumentGetNumberOfPages(document);
               if (pageCount > 0)
               {
                       CGPDFPageRef page = CGPDFDocumentGetPage(document, 1);
                       if (page != nil)
                       {
                               // *******TODO: the page object causes
the reference count underflow
                               CFMakeCollectable(page);

                               CGPDFContentStreamRef contentStream =
CGPDFContentStreamCreateWithPage(page);
                               if (contentStream != nil)
                               {
                                       CFMakeCollectable(contentStream);
                                       CGPDFOperatorTableRef
operatorTable = CGPDFOperatorTableCreate();
                                       if (operatorTable != nil)
                                       {
                                               CFMakeCollectable(operatorTable);
                                               // the op_xxx are just
functions defined in the .m file

CGPDFOperatorTableSetCallback(operatorTable, "q", &op_q);

CGPDFOperatorTableSetCallback(operatorTable, "Q", &op_Q);

CGPDFOperatorTableSetCallback(operatorTable, "cm", &op_cm);

                                               CGPDFScannerRef scanner
= CGPDFScannerCreate(stream, operatorTable, self);
                                               if (scanner != nil)
                                               {

CFMakeCollectable(scanner);

CGPDFScannerScan(scanner);
                                               }
                                       }
.                               }
- Hide quoted text -
                       }
               }
       }
}


> -Ken
>
> On Tue, Aug 12, 2008 at 8:46 PM, Oleg Krupnov <email@hidden> wrote:
>> I have added a call to CFMakeCollectable each time after I create a CF
>> object like this
>>
>> CFSomeTypeRef a = CFCreateSomeType();
>> if (a != nil)
>> {
>>    CFMakeCollectable(a);
>> }
>>
>> But I keep getting this runtime message in the console:
>> malloc: reference count underflow for 0x10773c0, break on
>> auto_refcount_underflow_error to debug.
>>
>> All CF objects I create are local vars in scope of one single
>> function, no instance or global vars. I create several CF objects,
>> some of them are used as arguments for other functions. The error is
>> issued only for one of the CF objects I create, the other work fine.
>>
>> What can be the problem?
>>
>> On Mon, Aug 11, 2008 at 3:25 PM, Antonio Nunes <email@hidden> wrote:
>>> On 11 Aug 2008, at 13:14, Antonio Nunes wrote:
>>>
>>>>> Will it cause a memory leak if I treat the Quartz object in the same
>>>>> way as I do to all my NSObject descendants, i.e. no retains and rely
>>>>> only on garbage collection?
>>>>
>>>> You either take care of the object's life time manually as you would in a
>>>> non-garbage collected environment, or you explicitly move it into the realm
>>>> of the garbage collector. Lookup "CFMakeCollectable" and "NSMakeCollectable"
>>>> in the docs.
>>>
>>> I should add: read the "Memory Management Semantics" in "Using Core
>>> Foundation with Garbage Collection" in the "Garbage Collection Programming
>>> Guide", which has a thorough explanation of how to handle CF objects under
>>> GC.
>>>
>>> António
>>>
>>> ----------------------------------------------------
>>> It isn't so important to do great things,
>>> as to do what you do with great love.
>>> ----------------------------------------------------
>>>
>>>
>>>
>>>
>> _______________________________________________
>>
>> 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
>>
>
_______________________________________________

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: Non-NSObject object and garbage collection
      • From: "Ken Ferry" <email@hidden>
    • Re: Non-NSObject object and garbage collection
      • From: Quincey Morris <email@hidden>
References: 
 >Non-NSObject object and garbage collection (From: "Oleg Krupnov" <email@hidden>)
 >Re: Non-NSObject object and garbage collection (From: Antonio Nunes <email@hidden>)
 >Re: Non-NSObject object and garbage collection (From: Antonio Nunes <email@hidden>)
 >Re: Non-NSObject object and garbage collection (From: "Oleg Krupnov" <email@hidden>)
 >Re: Non-NSObject object and garbage collection (From: "Ken Ferry" <email@hidden>)

  • Prev by Date: NSUserDefaultsController with defaults for another app
  • Next by Date: Re: NSTypesetter layoutParagraphAtPoint:
  • Previous by thread: Re: Non-NSObject object and garbage collection
  • Next by thread: Re: Non-NSObject object and garbage collection
  • Index(es):
    • Date
    • Thread