Apple WebObjects 3.5 User Manual

Page 137

Advertising
background image

Controlling Component State

137

responsibility for maintaining any needed component state. For this reason,
it’s rarely advisable to turn off page caching.

Using awake and sleep

Another way to control the amount of component state that’s maintained
between cycles is to make use of WOComponent’s

awake

and

sleep

methods.

Unlike WOComponent’s

init

method that’s invoked just once in the life of

the component, a component’s

awake

and

sleep

methods are invoked at the

beginning and end of any request-response loop that involves the
component.

By moving a component’s variable initialization routines from its

init

method

to its

awake

method and implementing a

sleep

method to release those

variables, you can reduce the space requirements for storing a component.
For example, the code for DodgeLite’s Main component could be changed
to:

// rewritten DodgeLite Main.wos
id models, model, selectedModels;
id prices, price, selectedPrices;
id types, type, selectedTypes;

- awake {

anApplication = [WOApplication application];
models = [[anApplication modelsDict] allValues];
types = [[anApplication typesDict] allValues];
prices = [anApplication prices];

}

- sleep {

models = nil;
types = nil;
prices = nil;

}

Note that in WebScript you set a variable to

nil

to mark it for release. In

Objective-C you send the object a

release

message:

- sleep {

[models release];
[types release];
[prices release];

}

Of course, what you save in storage by moving variable initialization to the

awake

method is lost in performance, since these variables will be

reinitialized on each cycle of the request-response loop.

Advertising