Xcode iOS 5.1 SDK strong和weakIBOutlets有什么区别?
我之前使用的是4.3 SDK,其中没有强大的IBOutlets.此外,iOS 5.1 SDK中不提供(自动)版本.
可以像这样创建出口
@interface SearchViewController : UIViewController<UISearchBarDelegate> {
IBOutlet UIView *viewSearchBar;
IBOutlet UIScrollView *scrollVieww;
IBOutlet UILabel *lblName;
}
Run Code Online (Sandbox Code Playgroud)
也喜欢这个
@interface SearchViewController : UIViewController<UISearchBarDelegate> {
}
@property(nonatomic, weak) IBOutlet UIScrollView *scrollVieww;
@property(nonatomic, weak) IBOutlet UIView *viewSearchBar;
@property(nonatomic, weak) IBOutlet UILabel *lblName;
@end
Run Code Online (Sandbox Code Playgroud)
我知道nonatomic/ atomic strong/ weak在ARC,但在第一个例子中它们是什么?strong,weak,nonatomic或atomic.
请解释或链接我的一些细节.
刚开始使用ARC.在ARC之前,我只是简单地宣布我的网点为例:IBOutlet UIButton *button;所以我不保留它或任何东西.使用ARC,不指定弱或强意味着强大.
所以,如果我在ARC(即IBOutlet UIButton *button;)下做同样的事情,这是否意味着按钮是一个强大的参考?或者我是否必须将其定义为弱?
简而言之,IBOutlet是否意味着 __weak?
我刚刚开始开发mac应用程序,我想在应用程序启动时将WebView作为URL.这是我的代码:
AppDelegate.h
#import <Cocoa/Cocoa.h>
#import <WebKit/WebKit.h>
@interface AppDelegate : NSObject <NSApplicationDelegate> {
WebView *myWebView;
//other instance variables
}
@property
(retain, nonatomic) IBOutlet WebView *myWebView;
//other properties and methods
@end
Run Code Online (Sandbox Code Playgroud)
AppDelegate.m:
#import "AppDelegate.h"
#import <WebKit/WebKit.h>
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSString *urlText = @"http://google.com";
[[self.myWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlText]]];
return;
// Insert code here to initialize your application
}
@end
Run Code Online (Sandbox Code Playgroud)
如何在WebView(OSX项目)中启动时加载URL?
我认为代码工作,但当我尝试在Interface Builder中将代码与WebView连接时,我无法在插座列表中找到"Web视图".谢谢我在最后一篇文章后更新了我的代码,但仍然无效.再次感谢您的回复.
我最近在这里和其他网站上一直在阅读有关IBOutlets是强还是弱的内容.官方判决是他们应该是弱者,除非他们引用顶级xib对象.
这可以.
然而,我还没有清楚地理解为什么将它们设置为强或弱实际上会对应用程序的内存管理产生影响.特别是从iOS6开始,viewDidUnload在接收内存警告时不再被调用,因此从这个意义上说,IBOutlets选择弱或强不会产生任何影响.
我是否正确地认为,对于视图控制器不再在导航堆栈上(即在它们被加载然后弹出之后),任何宣布为弱的IBOutlet将被释放?
感谢您的任何见解!
可能重复:
IBOutlets在ARC下是强还是弱?
在文档中,我读到"Outlets通常应该是弱的,除了那些从File的所有者到nib文件中的顶级对象(或者,在iOS中,故事板场景中)应该是强大的."
例子?我不明白什么时候最好使用IBOutlet的"弱"而不是"强"属性.
可能重复:
IBOutlets在ARC下是强还是弱?
我简单地读了一下ARC并且认为好,一切都很强大,代表很弱.
现在我在界面构建器中创建一个视图并制作IBOutlets,并且Xcode的默认设置设置为弱.
似乎有这个建议的原因,是否有一个理由是大多数IBOutlets想要弱财产?
那是因为这些视图(IBOutlets)已被保留,因为它们附加到其超级视图?我们很少取代IBOutlet观点?
但是我认为将它设置为强大并没有什么害处,它有问题吗?
这并不是纯粹的好奇心,我可能会误解一些关于Swift中弱引用的东西。
假设我从View Controller创建一个类,并将其引用传递给初始化程序:
class = MyClass(vc: self)
Run Code Online (Sandbox Code Playgroud)
由于情节提要和窗口已经保留了对该View Controller的引用,因此MyClass对它的弱引用似乎是合乎逻辑的(出于类似原因,默认情况下,在IB中创建的所有引用都是弱的):
class MyClass: NSObject {
private weak var viewController: UIViewController
init(vc: UIViewController) {
self.viewController = vc
super.init
}
func setViewController(_ vc: UIViewController) {
self.viewController = vc
}
...
}
Run Code Online (Sandbox Code Playgroud)
但是,此代码会产生编译错误,因为viewController变量不是可选的。所以我必须加'!' 查看viewController声明并删除初始化程序,仅留下setViewController看起来不太自然的内容。
禁止非可选的弱数据的背后原因是什么?
我注意到当我在故事板中创建一个插座时,它会生成以下代码__weak IBOutlet UILabel *mLabel;.
为什么它将它声明为弱指针?根据我的理解,当对象被释放时,其所有成员也将被释放.在我的大部分代码中,我都宣称这些出口是强有力的指针.这会产生问题吗?
ios ×7
objective-c ×6
iboutlet ×4
cocoa-touch ×2
ios5 ×2
iphone ×2
ios7 ×1
macos ×1
optional ×1
properties ×1
swift ×1
webview ×1
xcode ×1