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

  • Adam Washington

    Adam Washing

    12 Mayıs 2006
  • Grace Su

    Grace Su

    6 Ocak 2006
  • Theodore Leaf

    Theodore Lea

    29 AĞUSTOS 2006