gpt4 book ai didi

ios - 使用 [self.labelIBOutlet release] 与 [labelIBOutlet release]

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:58 29 4
gpt4 key购买 nike

为了成为 iPhone SDK 上的好内存公民,我一直在玩内存。

然而,我仍然很难理解"self.something" 和只是"something" 之间的区别。

据我了解,"self.something" 的意思是向类(class)询问“某事”,但我的想法有些不对。让我们看例子:

我曾处理过内存释放:

  1. [self.labelIBOUtlet release] -> 它崩溃了
  2. [labelIBOUtlet 发布] -> 它没有。

谁能解释一下这是什么原因?

谢谢!

编辑:

这是我在头文件上设置的信息:

@interface viewController : UIViewController {
UILabel * labelIBOutlet ;
}

@property (nonatomic,retain) IBOutlet UILabel * labelIBOutlet ;

最佳答案

你要明白“属性(property)”的含义使用“点”只是一种更快的调用“特殊方法”的方法,这些方法只是为了“设置”和“获取”变量属性而创建。

例如,您可以拥有自己的使用 subview 的类/UIView:

在 myView.h 中

@interface myView : UIView  {
UIWebView *webView;
}

如果你这样做,你就没有“属性(property)”,而只是一个对象......所以在你的 myView.m 中,你尝试像这样使用“点”:

NSLog(@"%i", self.webView.frame.size.width);

然后你得到一个错误,你不能这样做,xCode 说: 错误:访问未知的“webView”getter 方法

这只是意味着方法“webView”不存在...'因为当你调用“self.webView”时,你只是调用了一个名为“webView”的方法......此方法仅返回指向您的值的指针。当你打电话时:

self.webView=someValue;

您只是在调用方法“setWebView”,该方法只是将您的对象设置为 someValue...

但是……那两个不可见的方法从何而来?

如果您告诉它使用 webView 作为属性,它们将由 xCode 本身创建...在我们的示例中,添加一些行:

在 myView.h 中

    @interface myView : UIView  {
UIWebView *webView;
}

@property (nonatomic, retain) UIWebView *webView;

在 myView.m 中

@implementation myView

@synthesize webView;

// ...

执行此 xCode 将为您添加 2 个方法“webView”和“setWebView”,现在你可以调用:

NSLog(@"%i", self.webView.frame.size.width);

没有错误...

然后您可以输入值(格式正确,在本例中为指向现有 UIWebView 的指针)只是打电话:

self.webView = aUIWebView;

记得释放它,因为你在 :

@property (nonatomic, retain)  UIWebView *webView;

发布:

[webView release];

关于ios - 使用 [self.labelIBOutlet release] 与 [labelIBOutlet release],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5210199/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com