They are completely different.
The first gets the pointer to the object from the dictionary, and then interprets the pointer as BOOL . This means that any non nil pointer will be interpreted as YES and nil as NO . In a specific example, since dictionaries cannot contain nil pointers, you will only get YES from this line of code.
The second one takes the same object from the dictionary, and then sends a boolValue message boolValue that object. Presumably, and if the object recognizes the message, this will result in a version of the BOOL object.
As a concrete example, if the dictionary contains an NSNumber associated with the @"boolValue" key, NSNumber will receive a boolValue message, and if it is not YES , otherwise NO .
To answer your question, you must use the second form. Listing a pointer to a BOOL rarely makes sense.
source share