تعيين القيم الافتراضية لخصائص NSString
-
27-09-2019 - |
سؤال
أحاول تحديد الطريقة الموصى بها لتعيين القيم الافتراضية لخصائص NSString.
أتفهم أنه ليس من الآمن استخدام أساليب الملحقات في أساليب init و dealloc للفئة. غالبًا ما يكون لدي ثوابت سلسلة أود تعيين القيم الافتراضية. ما هي طريقة التوصية للقيام بذلك (بالنظر إلى أن Ivar سيتم إصداره في طريقة Dealloc)؟
على سبيل المثال ، أفهم أن ما يلي غير آمن:
@property (nonatomic, copy) NSString *identifier;
....
- (id) init
{
self = [super initWithLayer:displayLayer];
if (self != nil)
{
self.identifier = @"fireSpell01";
}
return self;
}
هل هو موافق ، أو أوصي بذلك:
identifier = [@"fireSpell01" retain];
أو يجب أن أفعل هذا:
identifier = [[NSString stringWithString:@"fireSpell01"] retain];
المحلول
فقط افعل هذا:
identifier = @"fireSpell01";
ليست هناك حاجة retain
السلسلة. توجد ثوابت السلسلة لعمر البرنامج ولا تحتاج أبدًا إلى الاحتفاظ بها أو إطلاقها. عمل [[NSString stringWithString:@"fireSpell01"] retain]
فقط يخلق نسخة غير ضرورية ولا معنى لها.
ما تريد تجنبه هو استخدام مستقديات الممتلكات في init
و dealloc
طُرق. نظرًا لأن المستقلين قد يكون لهم آثار جانبية تعتمد على بعض قيم الحالة ، فأنت لا ترغب في الاتصال بهم على الكائنات التي تم إنشاؤها جزئيًا/تم تدميرها جزئيًا. من الأفضل بكثير التعيين مباشرة إلى IVARs وتخطي المستوطنين أثناء init
.