запутался о том, когда использовать себя. в цели с - PullRequest
0 голосов
/ 01 апреля 2011

у меня есть следующий класс

@interface DetailMessageViewController : UIViewController<UITextFieldDelegate,MFMessageComposeViewControllerDelegate,UIScrollViewDelegate> {
NSString *messageid;
NSString *messagesenttime;
NSString *sendermobilenumber;

NewMessageAnimation *animation;
NSString *addseconds;
IBOutlet UITextField *replyfield;
IBOutlet UIButton *replybutton;
NSString *tempstring;
UIAlertView *messagesent;
NSTimer *checkifanimationplayed;

}

@property(nonatomic,retain) NSString *messageid;
@property(nonatomic,retain) NSString *messagesenttime;

-(IBAction)replytomessage:(id)sender;
-(NSString *)decryptstring:(NSString *)encryptedstring;
+ (NSData *)decodeBase64WithString:(NSString *)strBase64;
-(void) animateTextField: (UITextField*) textField up: (BOOL) up;
-(IBAction)goawaykeyboard;
-(NSString *)encryptstring:(NSString *)clearstring;
+(NSString *)returndestroytime;
@end

Я очень озадачен тем, когда использовать self. (Переменную экземпляра) в моей реализации. я никогда не использовал self.ivar в моей имплантации. я не выпустил ни одной из моих переменных экземпляра в методе dealloc, и я не установил для своих ivar значение nil в моем методе viewdidunload. моя программа все еще работает нормально. я знаю одно - я использую свойство, когда пытаюсь получить доступ или назначить ивары извне класса.

когда я пишу код, то что я делаю - я делаю "строю и анализирую". это дает мне несколько ошибок время от времени. я уверен, что я выпущу все выделенные ивары, где это возможно. Наконец, я убедился, что у меня нет синих ошибок в моей сборке и анализе. должно ли это быть хорошо, или я должен принудительно освободить все свои ivars в методе dealloc и установить ivars в nil в моем методе viewdidunload.

. Может ли кто-нибудь указать мне правильное направление для управления памятью.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2011

По сути, все очень просто: вы используете себя. если вы хотите получить доступ к свойству и оставить себя, если вы хотите получить доступ к переменной-члену. Тем не менее, доступ к свойству работает путем доступа к его получателю / установщику.

Таким образом, чтобы получить доступ к свой messageid по свойству, вы должны вызвать self.messageid, чтобы получить доступ к переменной по члену, вы просто вызовите messageid.

Теперь .. скажем, если у вас есть собственный конструктор, который передает messageid вашему классу, вы, скорее всего, сделаете что-то вроде

-(void) initWithMessageId:(NSString*) aMessageId {
  if (super initWithNibName:.....) {
    self.messageid = aMessageId;
    ...
  }
  return self;
}

что бы произошло, если бы вы только сделали

if (super initWithNibName:.....) {
    messageid = aMessageId;
    ...

вместо себя? Вы получите доступ к члену, поэтому вам необходимо сохранить себя для размещения свойства ("messageid = [aMessageId retain];").

0 голосов
/ 01 апреля 2011

Короче говоря, использование «построить и проанализировать» в качестве единственного метода предотвращения утечек не будет работать.Вот самое основное резюме:

Использование ключевого слова 'self' вызовет автоматически сгенерированные методы получения и установки.Помимо помощи в управлении памятью, свойства могут быть хорошими для уменьшения дублирования кода (например, если вы пишете пользовательский установщик или получатель, который выполняет «дополнительную» работу) и могут значительно упростить рефакторинг кода.

Независимо от того, решите ли вы использовать свойства, вы должны освободить все сохраненные данные в dealloc (в противном случае у вас будет утечка).Свойства облегчают идентификацию «сохраненной» памяти (подсказка: освободите и аннулируйте все свойства «сохранить»).

Для получения дополнительной информации об управлении памятью см. здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...