我需要一些关于 的最佳实践的指导URLSession/NSURLSession。
我的要求规定我必须执行临时/定期 HTTP GET 请求。即每隔几分钟,然后也许每 30 秒,随意改变。
无论如何,我已经实现了这一点,如下所示,我有一个包含如下代码的方法:
let urlRequest = URLRequest(url: url)
// set up the session
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
// make the request
let task = session.dataTask(with: urlRequest, completionHandler: { (data, response, error) in ...
Run Code Online (Sandbox Code Playgroud)
这使 URLSession 保持在此方法的范围内。
那么一些问题:
1)这是实现我正在寻找的东西的正确方法,还是我应该在类级别范围内有一个 URLSession 并创建多个“任务”?- 如果是这样,我应该对每个任务调用 .resume 吗?
2)如果这是 URLSession 可接受的使用范例,我是否会泄漏内存(ARC 不这么认为)?我问,因为我注意到 URLSession 对象似乎停留在我每次调用/替换它的方法的范围之外。(我通过对我定期检查的对象的弱引用来检查这一点)...
3) 是否有一种更简洁的方法可以使用 URLSession 临时 GET 请求相同的 URL?我觉得 NSURLConnection 处理得很好,但它已被弃用。
通常,我会使用一个可选变量来保存我的Timer引用,因为能够在重新创建之前使其无效并将其设置为很好nil。
我正在尝试使用SwiftUI并希望确保我这样做是正确的......
我声明为:
@State var timer:Publishers.Autoconnect<Timer.TimerPublisher>? = nil
Run Code Online (Sandbox Code Playgroud)
后来我:
self.timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
Run Code Online (Sandbox Code Playgroud)
要驱动 UI 文本控件,我使用:
.onReceive(timer) { time in
print("The time is now \(time)")
}
Run Code Online (Sandbox Code Playgroud)
使用此Combine类型Timer无效并重新创建的正确方法是什么?
我读过一个应该调用:
self.timer.upstream.connect().cancel()
但是,我是否还需要无效或简单地nil退出?
我正在努力使用 SwiftUI 有效地布局视图。我非常熟悉 UIKit 和 Autolayout,并且总是觉得它很直观。
我知道 SwiftUI 还很年轻,才刚刚开始,所以也许我期望太多,但举一个简单的例子:
说我有一个HStack看法Text()。
|--------------------------------|
| Text("static") Text("Dynamic") |
|________________________________|
Run Code Online (Sandbox Code Playgroud)
当我有动态内容时,当文本(“动态”)发生变化时,静态文本字符串会随着大小的变化而跳遍各处HStack......
我尝试了很多东西,,,Spacers()查看Dividers()了使用PreferenceKeys(链接),Alignment Guides(链接)的方法
最接近答案的是对齐指南,但它们很复杂。
复制自动布局基本将视图锚定到屏幕边缘附近并正确布局而不跳来跳去的能力的规范方法是什么?
我想锚定静态文本“纬度”,这样它就不会跳来跳去。
还有其他示例,因此我们将不胜感激有关如何最佳布局的更一般的答案......
使用自动布局,感觉我选择了一切顺利。对于 SwiftUI 来说就像是买彩票。
示例,显示单词“Latitude”随着坐标变化而跳跃:
示例,代码:
HStack {
Text("Latitude:")
Text(verbatim: "\(self.viewModelContext.lastRecordedLocation().coordinate.latitude)")
}
Run Code Online (Sandbox Code Playgroud)
当我的观点发生变化/动态背景时,我真的很挣扎。对于静态内容来说一切正常,如所有 WWDC 视频中所示。
使用HStack这样的:
HStack(alignment: .center, spacing: 20) {
Text("Latitude:")
Text(verbatim: "\(self.viewModelContext.lastRecordedLocation().coordinate.latitude)")
Spacer()
}
.padding(90)
Run Code Online (Sandbox Code Playgroud)
结果很好地固定,但我讨厌神奇的数字。
我一直在查看我的代码,我通常将我的委托ivars声明为像这样的指针:
__weak NSObject <ViewControllerDelegate> *delegate;
Run Code Online (Sandbox Code Playgroud)
我注意到Apple在他们的示例代码中声明了这样:
__weak id <ViewControllerDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
使用NSObject或id有什么区别?
另外,使用*声明为指针之间的区别是什么,因为使用委托似乎没有改变它是否是一个指针,
谢谢,约翰
我正试图RFQuiltLayout用我的UICollectionView.
我让CollectionView与标准配合工作正常,UICollectionViewFlowLayout但它只是一个网格.我希望我的照片布局很好,如图所示.
我在理解使用UICollectionView自定义布局所需的内容时遇到了一些麻烦.
我正在以编程方式做所有事情.我没有使用任何Interface Builder/NIB/Storyboard.
使用标准FlowLayout获取UICollectionView布局很容易,但是当我尝试更改为RFQuiltLayout时,我遇到了以下错误:
'UICollectionView must be initialized with a non-nil layout parameter'
Run Code Online (Sandbox Code Playgroud)
这似乎是一个常见的错误,但其他问题的建议/答案都没有帮助我解决它.
所以这是我的代码的相关部分:
.H
@interface PFRootViewController : UIViewController <OFFlickrAPIRequestDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@property (strong, nonatomic) UICollectionView *collectionView;
Run Code Online (Sandbox Code Playgroud)
.M
//UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
//Used to use the above standard FlowLayout, but now trying to move to the below RFQuiltLayout
RFQuiltLayout* layout = (id)[self.collectionView collectionViewLayout];
layout.direction = UICollectionViewScrollDirectionVertical;
layout.blockPixels = CGSizeMake(100, 40);
self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height) collectionViewLayout:layout];
self.collectionView.delegate …Run Code Online (Sandbox Code Playgroud) objective-c uikit ios uicollectionview uicollectionviewlayout
为什么 Swift 不允许这个通用函数:
我试图表达一个通用函数,它将采用两个“数字”类型,并比较它们,可以是整数、浮点数、双精度数等......
为什么斯威夫特说Same-type requirement makes generic parameters 'T' and 'U' equivalent,这有什么问题吗?
func isSameNumber <T, U> (lhs: T, rhs: U) where T: Numeric, U:Numeric, T == U {
if lhs == rhs {
print("true")
}
else{
print("false")
}
}
Run Code Online (Sandbox Code Playgroud) 我看到很多这样的代码:
DispatchQueue.main.async {
self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下, wheretableView是 的属性self,应该确保weak self像这样捕获:
DispatchQueue.main.async { [weak self] in
self?.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
我认为是这样,但是这种类型的“不安全”代码在代码库中无处不在,我想知道我是否遗漏了什么?
我正在构建一个应用程序,我希望在两个不同的视图控制器之间共享一个可变的NSArray.
之所以如此,是因为在其中一个viewcontrollers(main)上我需要主动检查数组的内容,如果某些属性是否满足则显示警告,而另一个viewcontroller(UI)是用户设置的UI进入所述数组的警报对象,并在tableview中管理警报对象.
所以我的问题是这个数组在哪里可能存在于我的应用程序委托中?
或者我最好将它驻留在主(根视图控制器)中并基本上将其传递给第二个UI视图控制器并每次动态填充UItableview,然后将其传回以更新主要的数组?
在远程iPad上测试应用程序的最优雅解决方案是什么?
我的想法是在我的客户可以访问的Web服务器上托管我的应用程序,然后他可以下载应用程序并在他的设备上进行测试.
问题是客户必须在其设备上安装Provisioning Profile.
哪个是最佳解决方案,以便我可以在远程设备上安装配置文件而无需Xcode?
对于这种最有效的情况,iOS开发者企业计划或iOS开发人员计划?
我该怎么办?
谢谢 .
我有一个永远循环的PHP脚本,检查值并记录它们.
如何让PHP脚本忽略max_execution_time?我只是将max_execution_time设置为一个巨大的值吗?
说我有这个代码
NSMutableString *object;
[object setString:@"myVar"];
Run Code Online (Sandbox Code Playgroud)
以后如何将对象用作var名称?
即...
[object.string someMethod];
Run Code Online (Sandbox Code Playgroud)
其中someMethod在myVar对象上调用(这是对象的字符串文本)
这可能吗?
ios ×8
objective-c ×4
swift ×4
iphone ×3
swiftui ×2
autolayout ×1
closures ×1
cocoa-touch ×1
combine ×1
delegates ×1
foundation ×1
generics ×1
macos ×1
nstimer ×1
nsurlsession ×1
php ×1
string ×1
types ×1
uikit ×1
view ×1