[Openmcl-devel] PDFKit crashes

Gary Byers gb at clozure.com
Thu May 28 00:15:10 PDT 2009

On Thu, 28 May 2009, R. Matthew Emerson wrote:

> On May 28, 2009, at 2:06 AM, Ron Garret wrote:
>> It turns out that I've been forgetting to #/init things all over the
>> place but things still mostly work for me.  Am I just getting lucky?
>> Should #/init always be called when #/alloc is called?
> Yes, either #/init or some more specific initializer, e.g. #/
> initWithFrame:, etc.
> There's also the #/new method, which combines #/alloc and #/init into
> one, but using it is apparently not considered stylish any more.

I personally consider MAKE-INSTANCE to be at least somewhat stylish.

(MAKE-INSTANCE class) == (#/new class) == (#/init (#/alloc class))

(MAKE-INSTANCE class {:with-pseudo-initarg-keyword value}+)

uses the provided set of keywords to construct an #/init... function
name (there's some caching involved ...) and does

(#/thatInitFunction: (#/alloc class) , at values)

It's not as high-level as it might look - a set of keywords that map
to an init function name have to all be present and present in the
canonical order for this to work - but things like:

(make-instance window-class
                :with-content-rect rect
                :style-mask style-mask
                :backing backing-type
                :defer nil)

may (or may not) look more readable than:

(#/initWithContentRect:styleMask:backing:defer: (#/alloc window-class)

though (modulo typos) the two forms should have equivalent effect.

>>  If not, how do
>> you know when you need to call #/init?  (Feel free to treat those as
>> rhetorical questions.  I'm sure there's a Cocoa memory management
>> primer somewhere that I can go read.)
> <http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW17
> >
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel

More information about the Openmcl-devel mailing list