Skip navigation.
 
mlRe: With What does Apple Swizzle the IsA-pointer in KVO?
FROM : Philip Mötteli
DATE : Fri Nov 23 19:09:15 2007

Am 23.11.2007 um 18:05 schrieb Clark Cox:
> On Nov 23, 2007 8:03 AM, Philip Mötteli <Philip.<email_removed>> 
> wrote:

>> Am 23.11.2007 um 15:54 schrieb Clark Cox:

>>> On Nov 23, 2007 5:42 AM, Philip Mötteli <Philip.<email_removed>>
>>> wrote:

>>>>
>>>> Apple says, that it uses IsA-swizzling as the underlying technology
>>>> to
>>>> implement KVO.
>>>> What are/is the class(es), which replace the original class of the
>>>> observed object? Is it an NSProxy subclass? Different NSProxy
>>>> subclasses, depending on the observed object? Is it a direct 
>>>> subclass
>>>> of the observed object?

>>
>>

>>> Perhaps I could provide more help if you
>>> stated why it is that you think that you need to know this.

>>
>> I need to know, when an object has changed and I would prefer to 
>> reuse
>> as much as possible, of what KVO already offers.
>> Unfortunately, KVO is based on the internals of an object (which
>> should be assumed as being hidden in OOP).

>
> KVC (and by extension, KVO) only uses instance variable directly if:
> 1) There is no appropriate accessor method
> 2) +accessInstanceVariablesDirectly is not implemented to return NO


>> I have a problem.
>> Ideally, I just want to implement a plug-in, that reuses the
>> functionality, offered by KVO, but extends it, so that the publicly
>> accessible part of an object can be observed instead of the hidden
>> internals.

>
> The publicly accessible parts of objects *are* what is observed.

What is the difference between:

- (void)setValue:(id)value forKey:(NSString *)key

and

OBJC_EXPORT void object_setIvar(id obj, Ivar ivar, id value)




In both versions, you have violated, what Apple writes in:

> An object’s data is protected and won’t be touched by any other part 
> of the program. Methods can therefore trust its integrity. They can 
> be sure that external access hasn’t put it in an illogical or 
> untenable state.


So yes, in my eyes, KVC violates OO principles (except, when it uses a 
publicly declared accessor).





> I'm still not clear as to what you're trying to do. NSString is not
> mutable, so attempting to observe one of it's properties doesn't make
> sense,


Yes, bad example. Take NSMutableString or NSMutableRLEArray, 
NSMutableAttributedString, NSAttributedString, NSMutableCharacterSet,…


> and finalize and dealloc are just methods, what would observing
> them even mean?


That your object has disappeared, which is also a kind of changement.

But Clarc, tell me, do you know the answer to my initial question:
> With What does Apple Swizzle the IsA-pointer in KVO?
>


Then, please tell me.

Related mailsAuthorDate
mlWith What does Apple Swizzle the IsA-pointer in KVO? Philip Mötteli Nov 23, 14:42
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Jean-Daniel Dupas Nov 23, 14:56
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Clark Cox Nov 23, 15:54
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Philip Mötteli Nov 23, 17:03
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Jean-Daniel Dupas Nov 23, 17:23
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Paul Sargent Nov 23, 17:50
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Clark Cox Nov 23, 18:05
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Philip Mötteli Nov 23, 19:09
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Philip Mötteli Nov 23, 19:09
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Sherm Pendley Nov 23, 19:09
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? mmalc crawford Nov 23, 19:25
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? glenn andreas Nov 23, 19:29
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Philip Mötteli Nov 23, 19:33
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Sherm Pendley Nov 23, 20:01
mlRe: With What does Apple Swizzle the IsA-pointer in KVO? Clark Cox Nov 23, 20:26