我试图清理我的应用程序从内存泄漏,我有一些问题了解这一点
为什么Request.serializeResponseJSON在我推出应用程序30秒后调用Alamofire功能:我没有触摸任何东西或导航到任何地方,屏幕是静态的.
它为什么泄漏?
为什么我的代码泄漏了?
屏幕加载后,我得到相同的泄漏.
到目前为止我尝试过的:
Autoreleasepool;
以各种可能的方式附加和初始化数组;
将所有变量(class,func)更改为可选/不可选/弱;
初始化课程UIViewController;
在主线程中初始化类;
在互联网上搜索这些问题.
我发现,使用Xcode内存工具,它以某种方式连接 _ContiguousArrayStorage,但我不明白它是如何以及实际上是什么.

我不知道这里有什么问题.任何提示将非常感激.
以下是所有相关代码:我的一般API请求
public func requestWithLocation(_ httpmethod: Alamofire.HTTPMethod, URL: String, parameters: [String: AnyObject]?, completionHandler: @escaping CompletionHandler) -> (){
var header: HTTPHeaders = [:]
var location: [String: Double] = [:]
let locationManager = CLLocationManager()
if (CLLocationManager.authorizationStatus() == .authorizedWhenInUse
|| CLLocationManager.authorizationStatus() == .authorizedAlways) && locationManager.location != nil {
location = [
"lon" : locationManager.location!.coordinate.longitude,
"lat" : locationManager.location!.coordinate.latitude
]
}
if User.sharedInstance.token != "" { …Run Code Online (Sandbox Code Playgroud) 我不确定它是不是一个错误,或者它确实是应该如何运作的?
class A {
init() throws { }
}
class B {
lazy var instance = A()
}
Run Code Online (Sandbox Code Playgroud)
这段代码使用XCode 9和最新Swift版本编译没有错误,并且除非Class A init()真正抛出,否则工作完美,然后lazy var为空指针.但是不应该以某种方式编译这段代码?
我CustomTableViewClass在厦门国际银行,将它添加到UITableView喜欢
class RestaurantsTableView: UITableView {
override func awakeFromNib() {
self.register(UINib(nibName: "RestaurantTableViewCell", bundle: nil), forCellReuseIdentifier: "restaurantCell")
}
}
Run Code Online (Sandbox Code Playgroud)
和一切工作正常,现在我想用这个CustomTableViewClass作为UIView在其他一些UIViewController,但我不明白如何正确地重写它的init(coder aCoder: NSCoder)功能,因为我并不需要一个UITableView情况下,当我实现它就像我的其他自定义XIB意见做它崩溃了nil
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let _ = Bundle.main.loadNibNamed("RestaurantTableViewCell", owner: self, options: nil)?[0] as! UIView
}
Run Code Online (Sandbox Code Playgroud) 这是我的JSON数据
{
"service_facility_id": 1,
"service_id": 4,
"facility_name": "Fitting",
"charge_per_min": 40,
"charge_per_km": 50
},
{
"service_facility_id": 10,
"service_id": 4,
"facility_name": "Health Care",
"charge_per_min": 100,
"charge_per_km": 0
}
Run Code Online (Sandbox Code Playgroud)
目前我正在使用Get方法在X Code中打印特定的JSON输出.所以我设法得到Minute(charge_per_min)值.但我希望以HH(小时)格式显示标签,因此如何将其转换为小时格式和小时格式转换为uilabel ..代码如下.
if let con = country["charge_per_km"] as? Int {
print("+++++\(con) +++ ")
self.chargPerKm.append(con)
print(self.chargPerKm)
let encodedArray : NSData = NSKeyedArchiver.archivedData(withRootObject:self.chargPerKm) as NSData
//Saving
let defaults = UserDefaults.standard
defaults.setValue(encodedArray, forKey:"charge_per_km")
print("\(UserDefaults.standard.value(forKey: "charge_per_km")!)")
defaults.synchronize()
print(defaults)
}
Run Code Online (Sandbox Code Playgroud)
任何人帮助我.
我需要在执行功能之前等待response.response?.allHeaderFields数据。我已经在网上搜索过,还没有完全了解如何向alamofire请求中添加“完成处理程序”。或者是否还有其他方法可以使函数等待。
@IBAction func comfirmation(sender: UIButton) {
if CodeTextField.text != "" {
print("in comfirmation function")
let comfirmationRequestData = [
"phone" : "\(appDelegate.savedNumber)",
"code" : "\(CodeTextField.text!)"
]
Alamofire.request(.POST,
"http://192.168.214.241:4000/login",
parameters: comfirmationRequestData,
encoding: .JSON).responseJSON {
response in
switch response.result {
case .Success:
let jsonDecrypted = JSON(response.result.value!)
print(jsonDecrypted)
let headerFile = response.response?.allHeaderFields as? [String:String]
print(headerFile)
case .Failure(let error):
print(error)
}
}
print("in comfirmation function. success")
appDelegate.defaults.setValue(appDelegate.savedNumber, forKey: "phoneNumber")
} else {
print("in comfirmation function. failed")
}
}
Run Code Online (Sandbox Code Playgroud) UIButtons我里面有一些UITableViewCells,并且所有这些都缺少默认的点击动画,但是如果我长按 - 动画就会起作用。我找到了一些解决方案,例如将 type 设置为.system, showsTouchOnHighlight = true,但没有一个有帮助。这里有什么问题?
ios ×4
swift ×4
alamofire ×2
instruments ×2
memory-leaks ×2
uitableview ×2
xcode ×2
iphone ×1
json ×1
nscoder ×1
null ×1
response ×1
swift3 ×1
synchronous ×1
throw ×1
uibutton ×1
uiview ×1
xib ×1