My Blog List

Showing posts with label initialization. Show all posts
Showing posts with label initialization. Show all posts

Friday, June 3, 2011

Reading Notes: Is it Magic? Is it happening in the framework code? Initialization of Window

 Exactly how 'window' is being initialized is bugging me. I'm not seeing an obvious place where the object is instantiated. 

Maybe because it's happening in the framework?

Or maybe because all the business of @synthesize and @property doing the accessing for me?

The author says that DeepThoughtsAppDelegate.m is initializing window. Is initialization happening by using 
·      @implentation directive?
o    Or
·      with the @synthesize window ?

·      Searched on ‘alloc’ and ‘init’ in the code. I don’t see init

·      Come back to this

·       getting used. Is there some magic that @synthesize does?

The @synthesize directive automatically generates the setters and getters for us, so all we have to implement for this class is the dealloc method. ..Accessors will only be generated if they don't already exist, so feel free to specify @synthesize for a property, then implement your custom getter or setter if you want. The compiler will fill in whichever method is missing.
…. Snip from the wikipedia online tutorial
a mutator method is a method used to control changes to a variable. The mutator method, sometimes called a "setter", is most often used in object-oriented programming, in keeping with the principle of encapsulation. According to this principle, member variables of a class are made private to hide and protect them from other code, and can only be modified by a public member function (the mutator method), which takes the desired new value as a parameter, optionally validates it, and modifies the private member variable.
Often a "setter" is accompanied by a "getter" (also known as an accessor), which returns the value of the private member variable…..


Reading Notes: Protocol Syntax (<, >) and Initialization




page 166 Goldstein goes through app initialization

I remembered what the < and > are for! They refer to protocol's. Protocols are a new concept for me. I keep thinking of C3PO in Star Wars telling Luke that he's a protocol droid. Which is REALLY not helpful.

A search on the syntax characters plus the word 'protocol' turned up the following in

http://en.wikipedia.org/wiki/Objective-C

- (void)setMyValue:(id)foo;
In the above statement, foo may be of any class.
- (void)setMyValue:(id<aProtocol>)foo;
In the above statement, foo may still be an instance of any class, but the class must conform to the aProtocol protocol.

.....

So when I look at the initialization code for the DeepThoughtsAppDelegate.h file and I see the line

@interface DeepThoughtsAppDelegate:NSObject <UIApplicationDelegate>

that must mean that MY AppDelegate class (DeepThoughtsAppDelegate), that I'm setting up here is 

* A subclass of NSObject AND
* Will conform to the UIApplicationDelegate protocol


Another basic syntax link
http://en.wikibooks.org/wiki/Objective-C_Programming/syntax
...
I NEED TO REMEMBER to double check on the use of "@class", which is not in the current book. 
I THINK it just means that I can use the DeepThoughtsViewController class from here

//  DeepThoughtsAppDelegate.h
//  DeepThoughts
//
//  Created by xxxxx on 5/30/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>

@class DeepThoughtsViewController;

@interface DeepThoughtsAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    DeepThoughtsViewController *viewController;
}
Other things I'm interpreting this code as doing is
declaring two instance variables window and viewController that will be part of the DeepThoughtsAppDelegate class. The window ivar is of type UIWindow and the viewController ivar inheirits from DeepThoughtsViewController (probably why I need to put that @class statement in)
* * *
A little less mystery about the code now