AMcoder - javascript, python, java, html, php, sql

Հիշողության արտահոսքի կարգավորումների փոփոխական է init?

Հիշողության կառավարումն ինձ նորից շփոթեցրել է...

Իմ .h ֆայլում ես ունեմ.

@property (nonatomic,retain) NSMutableDictionary *properties;

Իմ .m-ում ես ունեմ հետևյալ init մեթոդը, որը բողոքում է Instruments-ի արտահոսքի մասին self.properties տողում.

- (id) init {
  self = [super init];

  self.properties = [[NSMutableDictionary alloc] init];

  return self;
}

Այն նաև բողոքում է արտահոսքից, եթե ես չեմ օգտագործում աքսեսուարը:

Նմանապես, այն արտահոսում է, եթե ես օգտագործեմ այս ռազմավարությունը.

NSMutableDictionary *temp = [[NSMutableDictionary alloc] init];

self.properties = temp;

[temp release];

Իսկ dealloc-ում ես ունեմ.

self.properties = nil;
[properties release];

Ես կարծում էի, որ հետևում եմ կանոններին, բայց այս մեկն ինձ ակնարկում է։


Պատասխանները:


1

Եթե ​​ձեր .h-ը սահմանվում է այսպես.

@interface MDObject : NSObject {
    NSMutableDictionary *properties;
}

@property (nonatomic, retain) NSMutableDictionary *properties;

@end

Ձեր .m-ի հնարավոր ճիշտ իրականացումները հետևյալն են.

@implementation MDObject

- (id)init {
    if ((self = [super init])) {
         properties = [[NSMutableDictionary alloc] init];
    }
    return self;
}

- (void)dealloc {
    [properties release];
    [super dealloc];
}

@end

or

@implementation MDObject

- (id)init {
    if ((self = [super init])) {
         self.properties = [NSMutableDictionary dictionary];
    }
    return self;
}

- (void)dealloc {
    self.properties = nil; // while this works,
                           // [properties release] is usually preferred
    [super dealloc];
}

@end

Դա կարող է օգտակար լինել հիշելը

self.properties = [NSMutableDictionary dictionary];

նույնն է, ինչ

[self setProperties:[NSMutableDictionary dictionary]];

Այդ 2 մեթոդները, որոնք սինթեզված են ձեզ համար, նման կլինեն հետևյալին.

- (NSMutableDictionary *)properties {
    return properties;
}

- (void)setProperties:(NSMutableDictionary *)aProperties {
    [aProperties retain];
    [properties release];
    properties = aProperties;
}
09.07.2011
  • Շնորհակալություն, պարզվում է, որ Instruments-ի կողմից ինձ տանում էին զվարճալի ճանապարհով, դա այն առարկան չէր, որը ես կարծում էի, որ արտահոսում է, բայց ձեր կանոններն օգնեցին ինձ հիշեցնել, թե իրականում որտեղ պետք է նայել: 09.07.2011

  • 2

    Եթե ​​դուք ունեք @property(retain), ապա չպետք է պարզապես alloc օգտագործեք և օգտագործեք աքսեսուարը, քանի որ դուք չափից շատ եք պահել օբյեկտը: Կամ թողարկեք այն գույքը սահմանելուց հետո, կամ նախ թողարկեք այն:

    09.07.2011
  • Բայց չէ՞ որ դա պետք է լուծվեր կամ չօգտագործելով աքսեսուարը (նաև բողոքում է) կամ իմ ռազմավարությունը օգտագործելով temp-ը, որն այնուհետև ես թողարկում եմ: 09.07.2011
  • Դուք օգտագործում եք աքսեսուարը ձեր երկու օրինակներում: self.properties = օգտագործում է աքսեսուարը; properties = ոչ: 09.07.2011
  • Ճիշտ է, ես չեմ պատճենել և տեղադրել այդ տարբերակը, բայց նշել եմ, որ այն նաև բողոքում է արտահոսքի մասին, եթե ես չեմ օգտագործում աքսեսուարը, ես պետք է ավելի պարզ լինեի 09.07.2011
  • Հավանաբար, դուք այլ բան սխալ եք անում, քանի որ լավ կլինի, եթե հատկացնեք և այնուհետև ուղղակի նշանակեք: 09.07.2011
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..