self.hogeとhogeでは挙動が違う。

半年の間にいろいろありまして、
来年から就職します。鎌倉にあるWEB系の会社。Flasherとして採用です。Flashまともに使えるようになって、まだ日が浅いですが、この半年はかなり勉強になりました。
以前に公開したAR年賀状のソースがお恥ずかしい。




…といいつつObjctive-Cの投稿。

CocoaでSimpleVJなんていうソフトを作っていた癖に、iPhoneには非参入でした。

理由は、
iPhoneを持っていないのと、
折角Cocoaを覚えてきたのに、新たにUIKitフレームワークを叩きつけられて、萎えてしまった。

iPadを手に入れ、参入をきめました。UIKitも頑張ります。





self.hogeとhogeでは挙動が違う

何時の間にやらでた新文法、@propertyの挙動に少し戸惑ったので、メモ的に。
@propertyはsetter getterメソッドを自動で生成してくれるものらしいです。

例えば以下の用に、@property

TestHoge.h

#import <UIKit/UIKit.h>
#import "PDFViewController.h"

@interface TestHoge : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    UIViewController *controller;
}

// 代入時に自動的にretainしてくれる。
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) UIViewController *controller;

@end

TestHoge.m

@implementation test07pdfAppDelegate

// @propertyで指定した、getter, setterメソッドを生成。
@synthesize window;
@synthesize controller;


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
	
	
    UIViewController *aViewController = [[UIViewController alloc] initWithNibName:@"HogeViewController" bundle:[NSBundle mainBundle]];

    // ここ! これならretainしてくれるけれども、
    self.controller = aViewController;
    

    // controller = aViewController;
    // これでは、メソッドではなく、直接変数にアクセスしてしまう。
    // つまりメモリ参照で、retainしてくれないので、次の
    //  [aViewController release];
    // で参照がきえてしまう。
    
    [aViewController release];


    [window addSubview: controller.view];	
    [window makeKeyAndVisible];
    
    return YES;
}


- (void)dealloc {
    [controller release];
    [window release];
    [super dealloc];
}

@end