سؤال

و(نحن نتحدث عن التعليمات البرمجية داخل فرعية UIViewController العرف - وبالمناسبة أنا لا أستعمل IB) طيب حتى أنا تعيين عضو self.view في - (الفراغ) loadView، وبعد ذلك إنشاء عناصر تحكم بلدي و وجهات النظر وأيا كان في - (الفراغ) viewDidLoad، ومن ثم إضافتها إلى subview. إذا كان عنصر التحكم ليس عضوا، وإذا كنت إنشائه والافراج عنها محليا في الأسلوب، وهذا هو كيف أفعل ذلك: (مع UILabel)

- (void)viewDidLoad {
    UILabel *localLabel = [[UILabel alloc] initWithFrame:CGRectMake(81, 384, 148, 21)];
    localLabel.text = @"I'm a Label!";
    localLabel.AutoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                  UIViewAutoresizingFlexibleRightMargin |
                                  UIViewAutoresizingFlexibleBottomMargin);

    [self.view addSubview:localLabel];
    [localLabel release];
    [super viewDidLoad];
}
ضبط

وولهذا مجرد مثال لكيفية أود أن إنشاء تسمية محليا، خصائصه، إضافة إلى subview والافراج عنهم. ولكن مع الأعضاء، أفعل هذا:

UILabel *lblMessage;
...
@property (nonatomic, retain)UILabel *lblMessage;
...
- (void)viewDidLoad {
    UILabel *localMessage = [[UILabel alloc] initWithFrame:CGRectMake(81, 384, 148, 21)];
    localMessage.text = @"I'm a Label!";
    localMessage.AutoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                      UIViewAutoresizingFlexibleRightMargin |
                                      UIViewAutoresizingFlexibleBottomMargin);
    self.lblMessage = localMessage;
    [localMessage release];

    [self.view addSubview:lblMessage];
    [super viewDidLoad];
}

ولكن أنا أيضا ينظر عليها القيام به

...
- (void)viewDidLoad {
   UILabel *localMessage = [[UILabel alloc] initWithFrame:CGRectMake(81, 384, 148, 21)];
    localMessage.text = @"I'm a Label!";
    localMessage.AutoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                      UIViewAutoresizingFlexibleRightMargin |
                                      UIViewAutoresizingFlexibleBottomMargin);
    self.lblMessage = localMessage;

    [self.view addSubview:localMessage];
    [localMessage release];
    [super viewDidLoad];
}

ومن هذا القبيل في بلدي ابتداء التنمية فون 3: استكشاف الكتاب الإستراحة. إشعار إضافة متغير محلي، ثم اطلاق سراحهم. التي ينبغي أن أفعل؟ لا يهم على الإطلاق؟

هل كانت مفيدة؟

المحلول

إذا lblMessage خاصية الاحتفاظ (الذي غالبا ما يكون صحيحا)، ثم ليس هناك فرق وظيفي. خلاف ذلك، و-addSubview الإفراج قبل خلل، لأنه سوف محاولة لإضافة كائن يتم deallocated باعتباره subview.

وهنا تجول سريع للإشارة الاعتماد على localMessage، على افتراض lblMessage الممتلكات الإبقاء:

UILabel *localMessage = [[UILabel alloc]...  // retainCount is now 1
// Set up localMessage.  If you release'd now, you'd dealloc the object.
self.lblMessage = localMessage;  // retainCount is now 2
// You can safely call release now if you'd like.
[self.view addSubview:localMessage];  // retainCount is now 3.
[localMessage release];  // retainCount is now 2.

وأنت تريد retainCount ليغلق عند مستوى 2، لأن لديك بفعالية 2 ما يشير إلى هذا الكائن - الخاص بك lblMessage المؤشر الأعضاء، ومؤشر الاحتفاظ آخر في self.view

نصائح أخرى

وتسمية هذا عضوا وتسمية نطاق المحلية هي إشارات إلى بعضها البعض بحيث تكون نفس الكائن، لذلك لا يهم الطريقة التي ش تفعل ذلك، وأنا فقط لن تملك المحلية وتهيئة التسمية مباشرة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top