Obvious observations: self.navigationItem.title cannot be an instance variable, because a getter can do anything to generate a result, and a point designation just calls the getter. Even if it is an instance variable in this version of the OS, it may not have been in the past and may not be in the future. Even if the name is directly supported by the instance variable, it cannot be called _title - it could be called anything.
Even if you know for sure that the class has a specific instance variable, the corresponding mechanisms are removed from Objective-C 2.0. In an earlier version, you could use:
#import <objc/runtime.h> ... Ivar instanceVariable = class_getInstanceVariable([instance class], "varName"); // yes, really, a C-style string NSLog(@"offset of that var is %d", instanceVariable->ivar_offset);
Or similarly:
struct exampleClassStruct { @defs(exampleClass); };
However, now you have encountered errors such as "Invalid @defs application in non-fragile ABI". So in conclusion: you cannot do what you want. Probably the closest thing is to use class_GetProperty , which - like dotted notation - doesn't care about memory layouts or doesn't have the same name or even really an instance variable. Otherwise, the get_InstanceMethod class (on the same page) can be used to get the C function pointer to the receiver.
EDIT: quick follow-up after the following alastair comment below: runtime provides id object_getIvar(id object, Ivar ivar) ( link ) and set equivalent, which are opaque ways to get and set instance variables in a particular class, given that their address is now hidden . They take Ivar, which you get from class_getInstanceVariable or object_getInstanceVariable , so probably will not perform any complex search and explain why you can still get Ivars, even if the associated structure now has no public members.
EDIT2: see discussion with alastair below; the final parameter object_getInstanceVariable and / or the result of ivar_getOffset may be useful for doing what you want, depending on your interpretation of the documentation. Assuming you accept the same read as alastair, then any of the following will do what you want (temporarily encoded):
#import <objc/runtime.h> void *pointerToInstanceVariableA(id object, const char *variableName) { Ivar instanceVar = class_getInstanceVariable([object class], variableName); return (unsigned char *)object + ivar_getOffset(instanceVar); } void *pointerToInstanceVariableB(id object, char *variableName) { void *returnValue; Ivar instanceVar = object_getInstanceVariable(object, variableName, &returnValue); return returnValue; }