iPhone ديف - الطريقة التي ينبغي أن تضاف عضو كجهة subview
-
10-07-2019 - |
سؤال
و(نحن نتحدث عن التعليمات البرمجية داخل فرعية 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
نصائح أخرى
وتسمية هذا عضوا وتسمية نطاق المحلية هي إشارات إلى بعضها البعض بحيث تكون نفس الكائن، لذلك لا يهم الطريقة التي ش تفعل ذلك، وأنا فقط لن تملك المحلية وتهيئة التسمية مباشرة