5 ms·
Objective-C is much closer to true object orientation than C++, but IMO Apple neutered it by having the program crash if there was no message handler.
by jdsully 8y ago
Objective-C is much closer to true object orientation than C++, but IMO Apple neutered it by having the program crash if there was no message handler.
- mpweiher 8y agoIt crashes only if you let it. a) The crash is from the default unhandled exception handler, which will send a signal to abort. So if you just want to crash, you can either handle that particular exception or install a different unhandled exception handler b) An object gets sent the -forwardInvocation: message when objc_msgSend() encounters a message the object does not understand. The exception above gets raised by the default implementation of -forwardInvocation: in NSObject. o := NSObject new. o class -> NSObject n := NSInvocation invocationWithTarget:o andSelector: #class n resultOfInvoking class -> NSObject o forwardInvocation:n 2019-04-22 07:49:12.339 stsh[5994:785157] exception sending message: -[NSObject class]: unrecognized selector sent to instance 0x7ff853d023c0 offset: { (This shows that -forwardInvocation: in NSObject will raise that exception, even if the NSInvocation is for a message the object understands) If you override -forwardInvocation:, you can handle the message yourself. In fact, that is the last-ditch effort by the runtime. You will first be given the chance to provide another object to send the message to ( - (id)forwardingTargetForSelector:(SEL)aSelector; ) or to resolve the message in some other way, for example by installing the method ( + (BOOL)resolveInstanceMethod:(SEL)sel; )[0]. Cocoa's undo system is implemented this way[1], as is Higher Order Messaging[2][3] [0] https://developer.apple.com/documentation/objectivec/nsobject?language=objc https://developer.apple.com/documentation/objectivec/nsobjec... [1] https://developer.apple.com/documentation/foundation/nsundomanager?language=objc https://developer.apple.com/documentation/foundation/nsundom... [2] https://en.wikipedia.org/wiki/Higher_order_message https://en.wikipedia.org/wiki/Higher_order_message [3] https://github.com/mpw/HOM/blob/master/HOM.m https://github.com/mpw/HOM/blob/master/HOM.m
- matwood 8y agoBack when I wrote a lot of obj-c is when I really 'got' message passing vs. a function call. I miss obj-c, but everyone wants to move on to Swift.
- dragonwriter 8y agoWasn't the design decision (and implementation) involved in place log before Apple had anything to do with it?
- jdsully 8y agoNextStep adopted it but did not invent it. Once Apple acquired NextStep and released OS X they were the only major company supporting it and had defacto control over the language. The complaint I have is with NSObject which can be blamed on Next Step. Although another comment pointed out I just didn’t know about a workaround.
- dragonwriter 8y agoThere were two different major mutually-incompatible “flavors” of Objective-C (my first book on Objective-C covered both, and my first Objective-C programming was done on a NeXTcube), one of which originated at NeXT (NextStep was the OS that was NeXTs last major surviving product after they dropped hardware, not the company.)