SORU
5 Mart 2010, Cuma


Kullanma zamanı Objective-C 'öz'

Bu Apple iPhone değiştirilmemiş kodu '' şablonu: . Yardımcı Uygulama

- (void)applicationDidFinishLaunching:(UIApplication *)application {

 MainViewController *aController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
 self.mainViewController = aController;
 [aController release];

 mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
 [window addSubview:[mainViewController view]];
 [window makeKeyAndVisible];

}

mainViewController aController, self anahtar atandığında belirtilen:

 self.mainViewController = aController;

14 **'nin çerçeve ayarlanır self anahtar gerekli değildir . ancak,

 mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;

Ben ilk örnek self anahtar kaldırırsanız, program mesajı ile çöküyor

objc[1296]: FREED(id): message view sent to freed object=0x3b122d0

Eğer ikinci örnek için self anahtar kelime eklerseniz, program sorunsuz çalışır.

Herkes self ilk durumda ama ikincisini değil gerekli olduğunu açıklayabilir mi? Her iki durumda da mainViewController aynı örnek değişkeni ifade ettiğini varsayıyorum.

CEVAP
5 Mart 2010, Cuma


Kullanarak kendine sınıf "belirleyici" bu değişken olmasını, yerine ıvar değişen doğrudan neden olur.

self.mainViewController = aController;

eşittir:

[self setMainViewController:aController];

Diğer taraftan:

mainViewController = aController;

sadece değişiklikler mainViewController örnek değişkeni doğrudan, atlayarak, herhangi bir kod olabilir inşa halinde UİApplication setMainViewController yöntemi gibi bırakmadan eski nesneler, istinat yenilerini güncellenmesi iç değişkenler.

Senin çerçeve erişme durumda, hala belirleyici bir yöntem arıyorsun:

mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;

genişletir:

[[mainViewController view] setFrame:[[UIScreen mainScreen] applicationFrame]];

İdeal olarak, gelecekte kodunuzu, aynı zamanda da bu değer alınırken self.mainViewController (ya da [self mainViewController]) kullanıyor olmalıdır. Genel olarak, sınıflar daha az Olası için önemli kod kendi "alıcı" yöntemlerden daha onların "belirleyiciler", ama yine de mümkün olan erişim doğrudan kırabilecek bir şey bir gelecekte sürüm Cocoa Touch.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kurtindo Pop Games

    Kurtindo Pop

    2 HAZİRAN 2013
  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008
  • Rockstar Games

    Rockstar Gam

    17 ŞUBAT 2006