<iOS>关于自定义description的一点用法

今天在写一段代码时, 自定义了一个UIView, 并且修改了其description 显示, 

修改如下:

- (NSString *)description {

    NSLog(@"XXXX");

    NSString *selfDes = [NSString stringWithFormat:@"self=%@, yourAge=%d", self, self.yourAge];

    return selfDes;

}

运行时, 发现, 在使用NSLog这个自定义的UIView对象时, 发现程序崩溃,而且提示也比较莫名其妙,错误信息如下:

0x1c03b9c:  calll  0x1c03ba1                 ; __CFStringAppendFormatCore + 17

然后在左边的调试栈中,发现有大量的调用[SIniView description];  于是便推测,可以这个方法被多次调用, 然后才想到加入一免NSLog(@"xxxx");

运行发现在崩溃前, xxxx被反复地调用并显示出来。


后来,分析问题的原因,在于自定义description时,不能在里面还去调用self的转换成NSString的输出。因为在description中再去取self=%@,会使得里面又会调用自己的description方法。 所以形成了无效循环, 直到系统资源耗尽。

但是在description中,输入自己的其它对象,则是可以的。


part of amap_flutter_map; typedef void MapCreatedCallback(AMapController controller); ///用于展示高德地图的Widget class AMapWidget extends StatefulWidget { ///高德开放平台的key /// final AMapApiKey? apiKey; /// 初始化时的地图中心点 final CameraPosition initialCameraPosition; ///地图类型 final MapType mapType; ///自定义地图样式 final CustomStyleOptions? customStyleOptions; ///定位小蓝点 final MyLocationStyleOptions? myLocationStyleOptions; ///缩放级别范围 final MinMaxZoomPreference? minMaxZoomPreference; ///地图显示范围 final LatLngBounds? limitBounds; ///显示路况开关 final bool trafficEnabled; /// 地图poi是否允许点击 final bool touchPoiEnabled; ///是否显示3D建筑物 final bool buildingsEnabled; ///是否显示底图文字标注 final bool labelsEnabled; ///是否显示指南针 final bool compassEnabled; ///是否显示比例尺 final bool scaleEnabled; ///是否支持缩放手势 final bool zoomGesturesEnabled; ///是否支持滑动手势 final bool scrollGesturesEnabled; ///是否支持旋转手势 final bool rotateGesturesEnabled; ///是否支持倾斜手势 final bool tiltGesturesEnabled; /// 地图上显示的Marker final Set<Marker> markers; /// 地图上显示的polyline final Set<Polyline> polylines; /// 地图上显示的polygon final Set<Polygon> polygons; /// 地图创建成功的回调, 收到此回调之后才可以操作地图 final MapCreatedCallback? onMapCreated; /// 相机视角持续移动的回调 final ArgumentCallback<CameraPosition>? onCameraMove; /// 相机视角移动结束的回调 final ArgumentCallback<CameraPosition>? onCameraMoveEnd; /// 地图单击事件的回调 final ArgumentCallback<LatLng>? onTap; /// 地图长按事件的回调 final ArgumentCallback<LatLng>? onLongPress; /// 地图POI的点击回调,需要`touchPoiEnabled`true,才能回调 final ArgumentCallback<AMapPoi>? onPoiTouched; ///位置回调 final ArgumentCallback<AMapLocation>? onLocationChanged; ///需要应用到地图上的手势集合 final Set<Factory<OneSequenceGestureRecognizer>> gestureRecognizers; /// 创建一个展示高德地图的widget /// [AssertionError] will be thrown if [initialCameraPosition] is null; const AMapWidget({ Key? key, this.apiKey, this.initialCameraPosition = const CameraPosition(target: LatLng(39.90918
最新发布
03-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值