[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: libobjc2 objc_setassociatedobject issue
From: |
David Chisnall |
Subject: |
Re: libobjc2 objc_setassociatedobject issue |
Date: |
Fri, 13 Dec 2013 14:44:28 +0000 |
Ah, sorry, I was reading your example the other way around. This seems to be
because [[NSString alloc] init] returns a singleton on GNUstep. I don't think
this is necessarily a bug, as there's nothing in the contract for NSString that
says that it needs to return a new instance for different immutable strings.
In general, using associated objects on immutable objects is a bad idea,
because it breaks the assumption that you can use equal instances
interchangeably.
David
On 13 Dec 2013, at 14:03, David Chisnall <address@hidden> wrote:
> I've now added a test for this to the libobjc2 test suite, but it passes and
> so does not appear to be the cause. Your issue appears to be the dictionary
> being over-retained. I will investigate further.
>
> David
>
> P.S. When sending test cases, it helps to send them in the format of a test
> suite for the thing you are testing, or as stand-alone programs. I'd have
> got to this a lot sooner if I didn't have to hack on the test to make it
> compile.
>
> On 19 Nov 2013, at 01:33, Doug Warren <address@hidden> wrote:
>
>> Hi Guys,
>>
>> Was tracking a memory leak in an existing app and tracked it down to
>> objc_setassociatedobject not working as expected from the code being
>> developed for the Apple Runtime. The docs around objc_setassociatedobject
>> seem to imply it follows the Apple Runtime but this simple gtest will pass
>> on Apple but fail on libobjc/GNUStep Base:
>>
>> static BOOL deallocCalled = NO;
>> static const char* objc_setAssociatedObjectKey =
>> "objc_setAssociatedObjectKey";
>>
>> @interface NSMutableDictionary(setAssociatedObjectTest)
>> @end
>>
>> @implementation NSMutableDictionary(setAssociatedObjectTest)
>>
>> -(void) dealloc
>> {
>> deallocCalled = YES;
>> [super dealloc];
>> }
>>
>> @end
>>
>> TEST(objc_setAssociatedObject, AssociatedObjectsAreReleased)
>> {
>> @autoreleasepool {
>> NSObject* object = [[NSString alloc] init];
>>
>> NSMutableDictionary *info = [NSMutableDictionary
>> dictionaryWithCapacity:1];
>> objc_setAssociatedObject(object, &objc_setAssociatedObjectKey, info,
>> OBJC_ASSOCIATION_RETAIN);
>>
>> [object release];
>> }
>>
>> ASSERT_TRUE(deallocCalled);
>> }
>>
>> Adding calls to GSDebugAllocationList before/after the autorelease pool:
>> 1 NSDataMalloc
>> 1 GSMutableDictionary
>>
>> Shows that the dictionary leaks.
>>
>> Any thoughts?
>> _______________________________________________
>> Gnustep-dev mailing list
>> address@hidden
>> https://lists.gnu.org/mailman/listinfo/gnustep-dev
>
>
> _______________________________________________
> Gnustep-dev mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/gnustep-dev
- Re: libobjc2 objc_setassociatedobject issue, David Chisnall, 2013/12/13
- Re: libobjc2 objc_setassociatedobject issue,
David Chisnall <=
- Re: libobjc2 objc_setassociatedobject issue, Doug Warren, 2013/12/13
- Re: libobjc2 objc_setassociatedobject issue, Doug Warren, 2013/12/13
- Re: libobjc2 objc_setassociatedobject issue, David Chisnall, 2013/12/13
- Re: libobjc2 objc_setassociatedobject issue, Doug Warren, 2013/12/13
- Re: libobjc2 objc_setassociatedobject issue, Doug Warren, 2013/12/16
- Re: libobjc2 objc_setassociatedobject issue, David Chisnall, 2013/12/16
- Re: libobjc2 objc_setassociatedobject issue, Doug Warren, 2013/12/16
- Re: libobjc2 objc_setassociatedobject issue, David Chisnall, 2013/12/17