小编Jui*_*uit的帖子

Alamofire内存泄漏仪器

我试图清理我的应用程序从内存泄漏,我有一些问题了解这一点

在此输入图像描述

  • 为什么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)

xcode memory-leaks instruments swift alamofire

14
推荐指数
1
解决办法
786
查看次数

swift lazy var with throw init behavior

我不确定它是不是一个错误,或者它确实是应该如何运作的?

class A {
    init() throws { }
}

class B {
    lazy var instance = A()
}
Run Code Online (Sandbox Code Playgroud)

这段代码使用XCode 9和最新Swift版本编译没有错误,并且除非Class A init()真正抛出,否则工作完美,然后lazy var为空指针.但是不应该以某种方式编译这段代码?

throw lazy-initialization swift

9
推荐指数
1
解决办法
811
查看次数

使用仪器查找内存泄漏

我试过阅读几乎所有在互联网上体面的教程,但仍然无法理解这里发生了什么:在此输入图像描述

我"隐藏系统库"和"反转调用树",但我不明白如何找到负责例如此泄漏的实际代码.任何提示都表示赞赏.可能是我遗漏了一些明显的东西.我收到了数百个泄漏,但是我weak在闭包中使用,我没有引用彼此的类等等.但看起来我错过了一些基本的东西.

memory-leaks instruments ios automatic-ref-counting

8
推荐指数
1
解决办法
2603
查看次数

UITableViewCell作为来自XIB的UIView

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)

uitableview xib uiview nscoder ios

3
推荐指数
1
解决办法
2527
查看次数

如何在swift3中将min转换为小时?

这是我的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)

任何人帮助我.

iphone null xcode json swift3

3
推荐指数
1
解决办法
2705
查看次数

等待回应Alamofire迅速

我需要在执行功能之前等待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)

response synchronous ios swift alamofire

2
推荐指数
1
解决办法
6680
查看次数

UITableViewCell 内的 UIButton 默认点击动画

UIButtons我里面有一些UITableViewCells,并且所有这些都缺少默认的点击动画,但是如果我长按 - 动画就会起作用。我找到了一些解决方案,例如将 type 设置为.system, showsTouchOnHighlight = true,但没有一个有帮助。这里有什么问题?

uibutton uitableview uiviewanimation ios swift

0
推荐指数
1
解决办法
774
查看次数