Andreas,

It most certainly indicates a semantic.  That is, the generated property 
accessors and getters will retain the object versus, copying or assigning the 
object.  In this case, the semantic you are trying to enforce isn't possible 
for the type you are trying to enforce it on.  The error you're getting from 
the compiler would be no different than if you had indicated a retain semantic 
on a value type like NSInteger, etc.  In other words, "what you're trying to do 
is invalid for the type you specified".

As I indicated earlier, dispatch_queue_t isn't an object.  Thus, it must be 
treated differently.

If your goal is to enable dot-notation for the queue, then you must create the 
@property declaration in the header as follows:

@property (nonatomic) dispatch_queue_t myQueue;

And then implement your own getter and accessor (following my declared semantic 
of a nonatomic operation):

- (void)setMyQueue:(dispatch_queue_t)aQueue{
    if(myQueue != aQueue){
        dispatch_retain(aQueue);
        dispatch_release(myQueue);
        myQueue = aQueue;
    }
}

- (dispatch_queue_t)myQueue{
    return myQueue;
}

- Jamie

On Nov 2, 2011, at 10:30 AM, Andreas Grosam wrote:

> 
> On Nov 2, 2011, at 1:33 PM, Jamie Pinkham wrote:
> 
>> Automatic property generation doesn't support the semantics you need. 
>> 
>> You are correct that you have to use the dispatch_retain() and 
>> dispatch_release() functions; you just have write your setter and getter 
>> manually, using those functions. 
> 
> Sure, the property can't  be synthesized. But even when I define setter and 
> getter in the @implementation, I can't declare the property like:
> 
> @proprty (retain) dispatch_queue_t dispatchQueue;
> 
> in order to indicate the semantics,
> 
> since the compiler (clang) will refuse it with
> "error: property with 'retain (or strong)' attribute must be of object type 
> [3]"
> 
> 
> So, according the compiler, the property attribute "retain" does not indicate 
> a certain (and general) semantic, but assumes a specific implementation 
> applicable only for ObjC objects. Or, in other words, when I state "retain", 
> then I shall use objects and if I implement setter and getter, they shall 
> invoke retain and release.
> 
> I would understand if the compiler would only complain about the "retain" 
> attribute if it must synthesize it for "unknown" types.
> 
> Andreas
> 
> 
>> 
>> -Jamie
>> 
>> Sent from my iPhone
>> 
>> On Nov 2, 2011, at 7:52 AM, Andreas Grosam <agro...@onlinehome.de> wrote:
>> 
>>> I want to set a dispatch queue via a property. How should I set the 
>>> property's attributes when the queue is retained/released via functions 
>>> dispatch_retain() and dispatch_release()?
>>> 
>>> Currently, since using "retain" is only possible for objects, I just 
>>> declare it like follows:
>>> 
>>> @property (nonatomic) dispatch_queue_t dispatchQueue;
>>> 
>>> 
>>> But here, the retain/release semantic isn't exposed. Any better ideas?
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> 
>>> 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/jamiepinkham%40me.com
>>> 
>>> This email sent to jamiepink...@me.com
> 
> _______________________________________________
> 
> 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/jamiepinkham%40me.com
> 
> This email sent to jamiepink...@me.com

_______________________________________________

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