ARC 类型转换:显示转换 id 和 void *

/*

 * ARC有效时三种类型转换:

 */

1__bridge          // 转换

2__bridge_retained // 转换

3__bridge_transfer // 转换


// __bridge 转换 //////////////////////

// ARC无效时 对应的代码

id obj = [[NSObject alloc] init];

void *p = obj;


id o = p;

[o release];


//  ARC 有效时 通过 __bridge转换 id  void * 就能够相互转换

id obj = [[NSObject allocinit];

void *p = (__bridge void *)obj;

id o = (__bridge id)p;



void *p = (__bridge void *)obj;

id o = (__bridge id)p;

/*

 * 通过 __bridge 转换, id  void * 就能够相互转换。

 * 但是转换为 void *  __bridge 转换,其安全性与赋值给 __unsafe_unretained 修饰符相近,

 * 甚至会更低。如果管理时不注意赋值对象的所有者,就会因悬垂指针而导至程序崩溃。

 */

// __bridge 转换 //////////////////////



/*

 * __bridge_retained 转换可使要转换赋值的变量也持有所赋值的对象.

 */

// __bridge_retained 转换 /////////////

// ARC 有效时的代码

id obj = [[NSObject alloc] init];

void *p = (__bridge_retained void*)obj;


// ARC 无效时的代码

id obj = [[NSObject alloc] init];

void *p = obj;

[(id)p retain];


// __bridge_retained ARC 转换

void *p = 0;

{

    id obj = [[NSObject alloc] init];

    p = (__bridge_retained void *)obj;

}

NSLog(@"class=%@", [(__bridge id)p class]);

/*

 * 变量作用域结束时,虽然随着持有强引用的变显obj失效,对象随之释放,

 * 但由于 __bridge_retained 转换使变量p看上去处于持有该对象的状态,

 * 因此该对象不会被废弃。下面我们比较一下ARC无效时的代码是怎样的。

 */


// ARC 无效时的代码

void *p = 0;

{

    id obj = [[NSObject alloc] init]; /* [obj retainCount] -> 1 */

    p = [obj retain];     /* [obj retainCount] -> 2 */

    [obj release];      /* [obj retainCount] -> 1 */

}


/*

 * [(id)p retainCount] -> 1

 * 

 * [obj retainCount] -> 1

 * 对象扔存在

 */

NSLog(@"class=%@", [(__bridge id)p class]);

// __bridge_retained 转换 /////////////



/*

 * __bridge_transfer 转换提供与 __bridge_retained 相反的动作,

 * 被转换的变量所持有的对象在该变量被赋值给转换目标变量后随后释放。

 */

// __bridge_transfer 转换 /////////////

// ARC 有效时的代码

id obj = (__bridge_transfer id)p;


// ARC 无效时的代码

id obj = (id)p;

[obj retain];

[(id)p release];

// __bridge_transfer 转换 /////////////


/*

 * 不使用id型或对象型变量也可以生成、持有以及释放对象。

 * 虽然可以这样做,但在ARC中并不推荐这种方法。

 */

// ARC中并不推荐这种方法 /////////////

// ARC 有效时的代码

void *p = (__bridge_retained void *)[[NSObject alloc] init];

NSLog(@"class=%@", [(__bridge id)p class]);

(void)(__bridge_transfer id)p;


// ARC 无效时的代码

id p = [[NSObject alloc] init];

NSLog(@"class=%@", [p class]);

[p release];

// ARC中并不推荐这种方法 /////////////

vae@vae-ASUS-TUF-Gaming-A15-FA507UU-FA507UU:~/primitive_ws/src/Primitive-Planner/src/scripts$ roslaunch primitive_planner swarm.launch ... logging to /home/vae/.ros/log/bd228878-6248-11f0-9b88-51c660762ec6/roslaunch-vae-ASUS-TUF-Gaming-A15-FA507UU-FA507UU-36532.log Checking log directory for disk usage. This may take a while. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://vae-ASUS-TUF-Gaming-A15-FA507UU-FA507UU:40573/ SUMMARY ======== PARAMETERS * /drone_0_bridge_node/broadcast_ip: 127.0.0.255 * /drone_0_bridge_node/drone_id: 0 * /drone_0_bridge_node/odom_max_freq: 70 * /drone_0_odom_visualization/color/a: 1.0 * /drone_0_odom_visualization/color/b: 0.0 * /drone_0_odom_visualization/color/g: 0.0 * /drone_0_odom_visualization/color/r: 0.0 * /drone_0_odom_visualization/covariance_scale: 100.0 * /drone_0_odom_visualization/drone_id: 0 * /drone_0_odom_visualization/robot_scale: 0.24 * /drone_0_odom_visualization/tf45: False * /drone_0_pcl_render_node/cam_cx: 321.04638671875 * /drone_0_pcl_render_node/cam_cy: 243.44969177246094 * /drone_0_pcl_render_node/cam_fx: 387.229248046875 * /drone_0_pcl_render_node/cam_fy: 387.229248046875 * /drone_0_pcl_render_node/cam_height: 480 * /drone_0_pcl_render_node/cam_width: 640 * /drone_0_pcl_render_node/estimation_rate: 30.0 * /drone_0_pcl_render_node/map/x_size: 20.63661977236758 * /drone_0_pcl_render_node/map/y_size: 20.63661977236758 * /drone_0_pcl_render_node/map/z_size: 3.0 * /drone_0_pcl_render_node/sensing_horizon: 5.0 * /drone_0_pcl_render_node/sensing_rate: 10.0 * /drone_0_poscmd_2_odom/init_x: 0.3183098861837907 * /drone_0_poscmd_2_odom/init_y: 0.0 * /drone_0_poscmd_2_odom/init_z: 0.5 * /drone_0_primitive_planner_node/fsm/fail_safe: True * /drone_0_primitive_planner_node/fsm/flight_type: 2 * /drone_0_primitive_planner_node/fsm/no_replan_thresh: 0.5 * /drone_0_primitive_planner_node/fsm/realworld_experiment: True * /drone_0_primitive_planner_node/fsm/thresh_replan_time: 0.2 * /drone_0_primitive_planner_node/fsm/waypoint0_x: -0.3183098861837907 * /drone_0_primitive_planner_node/fsm/waypoint0_y: -0.0 * /drone_0_primitive_planner_node/fsm/waypoint0_z: 0.5 * /drone_0_primitive_planner_node/fsm/waypoint1_x: 0.0 * /drone_0_primitive_planner_node/fsm/waypoint1_y: 0.0 * /drone_0_primitive_planner_node/fsm/waypoint1_z: 0.0 * /drone_0_primitive_planner_node/fsm/waypoint2_x: 0.0 * /drone_0_primitive_planner_node/fsm/waypoint2_y: 0.0 * /drone_0_primitive_planner_node/fsm/waypoint2_z: 0.0 * /drone_0_primitive_planner_node/fsm/waypoint_num: 1 * /drone_0_primitive_planner_node/manager/arc_length: 3.0 * /drone_0_primitive_planner_node/manager/boxX: 6.0 * /drone_0_primitive_planner_node/manager/boxY: 6.0 * /drone_0_primitive_planner_node/manager/boxZ: 6.0 * /drone_0_primitive_planner_node/manager/depthCloudStackNum: 1 * /drone_0_primitive_planner_node/manager/drone_id: 0 * /drone_0_primitive_planner_node/manager/lamda_b: 50.0 * /drone_0_primitive_planner_node/manager/lamda_l: 200.0 * /drone_0_primitive_planner_node/manager/map_size_x: 20.63661977236758 * /drone_0_primitive_planner_node/manager/map_size_y: 20.63661977236758 * /drone_0_primitive_planner_node/manager/map_size_z: 3.0 * /drone_0_primitive_planner_node/manager/max_vel: 1.0 * /drone_0_primitive_planner_node/manager/primitiveFolder: /home/vae/primiti... * /drone_0_primitive_planner_node/manager/sampleSize: 10000 * /drone_0_primitive_planner_node/manager/swarm_clearence: 0.24 * /drone_0_primitive_planner_node/manager/voxelSize: 0.1 * /drone_0_traj_server/init_x: 0.3183098861837907 * /drone_0_traj_server/init_y: 0.0 * /drone_0_traj_server/init_z: 0.5 * /drone_0_traj_server/traj_server/max_vel: 1.0 * /drone_0_traj_server/traj_server/primitiveFolder: /home/vae/primiti... * /drone_0_traj_server/traj_server/time_delay_idx: 0 * /drone_0_traj_server/traj_server/time_forward: 1.0 * /random_forest/ObstacleShape/lower_hei: 0.0 * /random_forest/ObstacleShape/lower_rad: 0.2 * /random_forest/ObstacleShape/radius_h: 0.5 * /random_forest/ObstacleShape/radius_l: 0.7 * /random_forest/ObstacleShape/theta: 0.5 * /random_forest/ObstacleShape/upper_hei: 3.0 * /random_forest/ObstacleShape/upper_rad: 0.5 * /random_forest/ObstacleShape/z_h: 0.8 * /random_forest/ObstacleShape/z_l: 0.7 * /random_forest/map/circle_num: 0.46484179349639226 * /random_forest/map/obs_num: 0.46484179349639226 * /random_forest/map/resolution: 0.1 * /random_forest/map/x_size: -0.9642010096410315 * /random_forest/map/y_size: -0.9642010096410315 * /random_forest/map/z_size: 3.0 * /random_forest/min_distance: 0.8 * /random_forest/pub_rate: 1.0 * /rosdistro: noetic * /rosversion: 1.17.4 NODES / drone_0_bridge_node (swarm_bridge/bridge_node_udp) drone_0_odom_visualization (odom_visualization/odom_visualization) drone_0_pcl_render_node (local_sensing_node/pcl_render_node) drone_0_poscmd_2_odom (poscmd_2_odom/poscmd_2_odom) drone_0_primitive_planner_node (primitive_planner/primitive_planner_node) drone_0_traj_server (primitive_planner/traj_server) random_forest (map_generator/random_forest) rviz (rviz/rviz) auto-starting new master process[master]: started with pid [36557] ROS_MASTER_URI=http://localhost:11311 setting /run_id to bd228878-6248-11f0-9b88-51c660762ec6 process[rosout-1]: started with pid [36582] started core service [/rosout] process[drone_0_bridge_node-2]: started with pid [36589] process[random_forest-3]: started with pid [36590] process[rviz-4]: started with pid [36591] process[drone_0_primitive_planner_node-5]: started with pid [36597] process[drone_0_traj_server-6]: started with pid [36599] process[drone_0_poscmd_2_odom-7]: started with pid [36600] process[drone_0_odom_visualization-8]: started with pid [36601] process[drone_0_pcl_render_node-9]: started with pid [36611] [ERROR] [1752672500.302585947]: Illegal pathID=-1 [rosmsg_tcp_bridge] start running [drone_0_primitive_planner_node-5] process has finished cleanly log file: /home/vae/.ros/log/bd228878-6248-11f0-9b88-51c660762ec6/drone_0_primitive_planner_node-5*.log [WARN] [1752672500.791081325]: Finished generate random map [pcl::KdTreeFLANN::setInputCloud] Cannot create a KDTree with an empty input cloud! [WARN] [1752672500.794334498]: Global Pointcloud received.. [pcl::KdTreeFLANN::setInputCloud] Cannot create a KDTree with an empty input cloud! [drone_0_pcl_render_node-9] process has died [pid 36611, exit code -11, cmd /home/vae/primitive_ws/devel/lib/local_sensing_node/pcl_render_node ~global_map:=/map_generator/global_cloud ~odometry:=/drone_0_visual_slam/odom ~pcl_render_node/cloud:=/drone_0_pcl_render_node/cloud __name:=drone_0_pcl_render_node __log:=/home/vae/.ros/log/bd228878-6248-11f0-9b88-51c660762ec6/drone_0_pcl_render_node-9.log]. log file: /home/vae/.ros/log/bd228878-6248-11f0-9b88-51c660762ec6/drone_0_pcl_render_node-9*.log [INFO] [1752672501.293613925]: [Traj server]: ready. [rospack] Error: failed to parse command-line options: too many positional options have been specified on the command line [librospack]: error while executing command [rospack] Error: failed to parse command-line options: too many positional options have been specified on the command line [librospack]: error while executing command [rospack] Error: failed to parse command-line options: too many positional options have been specified on the command line [librospack]: error while executing command [WARN] [1752672547.878321128]: Shutdown request received. [WARN] [1752672547.878370290]: Reason given for shutdown: [user request] [random_forest-3] process has finished cleanly log file: /home/vae/.ros/log/bd228878-6248-11f0-9b88-51c660762ec6/random_forest-3*.log
最新发布
07-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值