Re: Arc and performSelector
Re: Arc and performSelector
- Subject: Re: Arc and performSelector
- From: "Gerriet M. Denkmann" <email@hidden>
- Date: Tue, 18 Oct 2011 00:19:40 +0700
On 18 Oct 2011, at 00:05, David Duncan wrote:
> On Oct 15, 2011, at 11:58 PM, Gerriet M. Denkmann wrote:
>
>> I have this code:
>>
>> for( id aThing in someArray )
>> {
>> if ( [ aThing respondsToSelector: @selector(setTitle:) ] )
>> {
>> [ self replaceIn: aThing
>> readSelector: @selector(title)
>> writeSelector: @selector(setTitle:)
>> withTable: tableName
>> ];
>> }
>> }
>>
>>
>> - (void)replaceIn: thing readSelector: (SEL)selectorIn writeSelector: (SEL)selectorOut withTable: (NSString *)tableName;
>> {
>> NSString *key = [ thing performSelector: selectorIn ];
>> ...
>> NSString *rep = ...
>> [ thing performSelector: selectorOut withObject: rep ];
>> }
>>
>> Now, using Arc I am told that "PerformSelector may cause a leak because its selector is unknown".
>> What I am supposed to do about this? I really want to have code without warnings.
>
>
> ARC can't see the selector you pass to know if it conforms to the memory management policy implied by the -performSelector* calls, hence it reports this warning. If you called [thing performSelector:@selector(copy)] for example, you would leak. If you called [thing performSelector:@selector(release)] (not valid in ARC, but possibly if the selector is passed back by other means) you would over-release and crash.
I understand this. So I tried to tell the compiler that the passed selector is not like copy:
- (void)replaceIn: thing readSelector: (__attribute__((ns_returns_not_retained)) SEL)selectorIn
{
NSString *key = [ thing performSelector: selectorIn ];
}
But it still complains: "PerformSelector may cause a leak because its selector is unknown".
Sure, it is unknown, but it's non-retaining behaviour is known.
Is this a bug?
I will have to think about the block approach. But not now — it is past midnight already.
Kind regards,
Gerriet.
_______________________________________________
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